看板 java 關於我們 聯絡資訊
最近在熟悉interface的觀念 忽然很好奇 如果今天有很多個interface 但是要implements這些interface的class有很多種可能 只能一一的先把可能的排列組合先列出來嗎 比如說 interface flyer{...} interface person{...} interface animal{...} 而我今天想要implements的物件可能隨機是超人或小鳥 那我一定要先 class Superman implements flyer,person{...} class Bird implements flyer,animal{....} 再由判斷是決定是哪個東西 有辦法藉由先判斷在動態決定要implements哪些interface嗎? ((雖然我覺得這樣動態寫好像也會造成後續判斷上的困難!? -- ※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 219.87.84.93 ※ 文章網址: http://www.ptt.cc/bbs/java/M.1408960207.A.061.html
ssccg: implement interface的是class,不是object 08/25 18:42
banjmin: 你的case用Strategy Pattern 08/25 19:52
Killercat: 你的描述很像「第一類物件」 Strategy可以解決一部份 08/25 19:59
Killercat: 問題,不過你想問的應該是「動態決定他有某個行為」吧 08/25 19:59
Killercat: java無法產生第一類物件,javascript倒是可以 08/25 20:00
Killercat: google://第一類物件 or google://First-class Objects 08/25 20:00
Killercat: 通常來講,強型別語言是沒辦法支援這種的 08/25 20:01
去查了一下 跟我想問的東西很像沒錯 也有看到類似的說明 我會去研究看看Strategy Pattern 感謝各位的建議!!!!
bitlife: Proxy? 08/25 20:19
看了一下 Strategy 比較符合一點
luoqr: 先描述什麼樣的情境你會想要這樣做? 08/25 21:15
我會隨機取得一些info 這些info配有隨機event 每個event有不同要做的事情 甚至同一個event有多種事情要做 我無法知道這些info到底會配到哪些event 可能是一個 可能是十個 我只知道event list 於是直覺上想到多重繼承就是用interface 才想說先做好event然後讀入裝置的時候動態implement ※ 編輯: erttyy8821 (219.87.84.93), 08/25/2014 21:33:48
Killercat: Strategy仍然必須要有一個「配接口」在class上 08/25 23:55
Killercat: Windows有一種類似的實作叫做COM,簡單的說就是個萬用 08/25 23:56
Killercat: 配接口,用非常有限的interface來描述功能。 08/25 23:56
Killercat: 你應該是希望「連配接口都沒有 動態probe看有沒有實作 08/25 23:57
Killercat: 」吧,這樣的話java目前來講還做不到 08/25 23:57
Killercat: 不管是Java還是COM(以及後期的DCOM)都仍然要有個接口 08/25 23:57
Killercat: 語言層級無法支援的話,在設計上請儘量避開 08/25 23:58
Killercat: 已Strategy觀點來講 COM的「接口」就是IUnknown 08/25 23:59
我理解的沒錯的話 要不我就要先把"可能"的狀態都先implement出來 要不就是換個設計 比如說將拿到的info的event以list存起來再一一做判斷之類的 !? ※ 編輯: erttyy8821 (203.74.126.1), 08/26/2014 10:01:19
Killercat: DI配Tool.jar也是能解 麻煩而已 08/26 10:03
Killercat: 不過我還是建議你改個設計會好一點 08/26 10:04
Killercat: tools.jar可以動態compile 你可以再code裏面動態把code 08/26 10:06
Killercat: 寫成檔案 動態呼叫tools.jar compile 動態用DI兜起來 08/26 10:06
Killercat: 然後再動態「倒」上class上預留的萬用接口 08/26 10:06
Killercat: 這其實不難 不過真的沒必要搞得那麼麻煩.... 08/26 10:07
ok 我也傾向改個設計 長知識了 謝謝!! ※ 編輯: erttyy8821 (203.74.126.1), 08/26/2014 10:08:07
Killercat: 程式裏面動態寫code進檔案->tools.jar->用classloader 08/26 10:08
Killercat: 把compile好的檔案接回去 大概類似這樣的作法 08/26 10:08
Killercat: 預留的接口可以參考IUnknown式怎麼做的 08/26 10:09