[問題] 動態implements interface

作者: erttyy8821 (俠)   2014-08-25 17:50:03
最近在熟悉interface的觀念
忽然很好奇
如果今天有很多個interface
但是要implements這些interface的class有很多種可能
只能一一的先把可能的排列組合先列出來嗎
比如說
interface flyer{...}
interface person{...}
interface animal{...}
而我今天想要implements的物件可能隨機是超人或小鳥
那我一定要先
class Superman implements flyer,person{...}
class Bird implements flyer,animal{....}
再由判斷是決定是哪個東西
有辦法藉由先判斷在動態決定要implements哪些interface嗎?
((雖然我覺得這樣動態寫好像也會造成後續判斷上的困難!?
作者: ssccg (23)   2014-08-25 18:42:00
implement interface的是class,不是object
作者: banjmin (HD)   2014-08-25 19:52:00
你的case用Strategy Pattern
作者: Killercat (殺人貓™)   2014-08-25 19:59:00
你的描述很像「第一類物件」 Strategy可以解決一部份問題,不過你想問的應該是「動態決定他有某個行為」吧java無法產生第一類物件,javascript倒是可以google://第一類物件 or google://First-class Objects通常來講,強型別語言是沒辦法支援這種的
作者: bitlife (BIT一生)   2014-08-25 20:19:00
Proxy?
作者: luoqr (.....)   2014-08-25 21:15:00
先描述什麼樣的情境你會想要這樣做?
作者: Killercat (殺人貓™)   2014-08-25 23:55:00
Strategy仍然必須要有一個「配接口」在class上Windows有一種類似的實作叫做COM,簡單的說就是個萬用配接口,用非常有限的interface來描述功能。你應該是希望「連配接口都沒有 動態probe看有沒有實作」吧,這樣的話java目前來講還做不到不管是Java還是COM(以及後期的DCOM)都仍然要有個接口語言層級無法支援的話,在設計上請儘量避開已Strategy觀點來講 COM的「接口」就是IUnknownDI配Tool.jar也是能解 麻煩而已不過我還是建議你改個設計會好一點tools.jar可以動態compile 你可以再code裏面動態把code寫成檔案 動態呼叫tools.jar compile 動態用DI兜起來然後再動態「倒」上class上預留的萬用接口這其實不難 不過真的沒必要搞得那麼麻煩....程式裏面動態寫code進檔案->tools.jar->用classloader把compile好的檔案接回去 大概類似這樣的作法預留的接口可以參考IUnknown式怎麼做的

Links booklink

Contact Us: admin [ a t ] ucptt.com