作者erttyy8821 (俠)
看板java
標題[問題] 動態implements interface
時間Mon Aug 25 17:50:03 2014
最近在熟悉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://webptt.com/m.aspx?n=bbs/java/M.1408960207.A.061.html
1F:→ ssccg: implement interface的是class,不是object 08/25 18:42
2F:推 banjmin: 你的case用Strategy Pattern 08/25 19:52
3F:→ Killercat: 你的描述很像「第一類物件」 Strategy可以解決一部份 08/25 19:59
4F:→ Killercat: 問題,不過你想問的應該是「動態決定他有某個行為」吧 08/25 19:59
5F:→ Killercat: java無法產生第一類物件,javascript倒是可以 08/25 20:00
6F:→ Killercat: google://第一類物件 or google://First-class Objects 08/25 20:00
7F:→ Killercat: 通常來講,強型別語言是沒辦法支援這種的 08/25 20:01
去查了一下 跟我想問的東西很像沒錯
也有看到類似的說明
我會去研究看看Strategy Pattern
感謝各位的建議!!!!
8F:→ bitlife: Proxy? 08/25 20:19
看了一下 Strategy 比較符合一點
9F:推 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
10F:→ Killercat: Strategy仍然必須要有一個「配接口」在class上 08/25 23:55
11F:→ Killercat: Windows有一種類似的實作叫做COM,簡單的說就是個萬用 08/25 23:56
12F:→ Killercat: 配接口,用非常有限的interface來描述功能。 08/25 23:56
13F:→ Killercat: 你應該是希望「連配接口都沒有 動態probe看有沒有實作 08/25 23:57
14F:→ Killercat: 」吧,這樣的話java目前來講還做不到 08/25 23:57
15F:→ Killercat: 不管是Java還是COM(以及後期的DCOM)都仍然要有個接口 08/25 23:57
16F:→ Killercat: 語言層級無法支援的話,在設計上請儘量避開 08/25 23:58
17F:→ Killercat: 已Strategy觀點來講 COM的「接口」就是IUnknown 08/25 23:59
我理解的沒錯的話
要不我就要先把"可能"的狀態都先implement出來
要不就是換個設計
比如說將拿到的info的event以list存起來再一一做判斷之類的 !?
※ 編輯: erttyy8821 (203.74.126.1), 08/26/2014 10:01:19
18F:→ Killercat: DI配Tool.jar也是能解 麻煩而已 08/26 10:03
19F:→ Killercat: 不過我還是建議你改個設計會好一點 08/26 10:04
20F:→ Killercat: tools.jar可以動態compile 你可以再code裏面動態把code 08/26 10:06
21F:→ Killercat: 寫成檔案 動態呼叫tools.jar compile 動態用DI兜起來 08/26 10:06
22F:→ Killercat: 然後再動態「倒」上class上預留的萬用接口 08/26 10:06
23F:→ Killercat: 這其實不難 不過真的沒必要搞得那麼麻煩.... 08/26 10:07
ok 我也傾向改個設計
長知識了 謝謝!!
※ 編輯: erttyy8821 (203.74.126.1), 08/26/2014 10:08:07
24F:→ Killercat: 程式裏面動態寫code進檔案->tools.jar->用classloader 08/26 10:08
25F:→ Killercat: 把compile好的檔案接回去 大概類似這樣的作法 08/26 10:08
26F:→ Killercat: 預留的接口可以參考IUnknown式怎麼做的 08/26 10:09