作者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/cn.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