[问题] 动态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