DCI中角色注入的问题 2013-08-23 showerxp public String hello(String id) {Robot robot = robotRepository.find(id);//将角色智能机器人IntelligentRole的行为注入到Robot数据对象中IntelligentRole intelligentRobot = (IntelligentRole) roleAssigner.assign(robot, new IntelligentRobot());//得到一个混和robot将具有听 看 感觉等能力行为return "Hello, " + intelligentRobot.hear();} 这里intelligentRobot 对象是怎么混合着robot数据又具有听、看、感觉的行为?
gameboyLV 2013-08-23 19:16 应该是智能机器人的构造函数能够接受机器人这个参数。 智能机器人是自己去实现这些行为,然后将状态保存在机器人而已。机器人打架之前有10升油,然后派一个智能机器人去打架用掉自己6升油,打完架之后还剩4升油。
showerxp 2013-08-26 09:43 好吧,我把代码贴全一些。banq老板呢?public class IntelligentRobot implements IntelligentRole { @Override public String hear() { return "I hear something"; } @Override public String see() { return "I see something"; } @Override public String feel() { return "I feel something"; }}public interface IntelligentRole { String hear(); String see(); String feel();}
banq 2013-08-27 09:02 基本如gameboyLV所说,这里将机器人和智能机器人分开,机器人没有能力行为,而智能机器人有能力行为,可以听说感觉等。智能机器人可以看成机器人在一定场合下需要扮演的角色。比如在排爆场景下,需要机器人有能力行为,这时我们就将智能机器人的行为注入到机器人中,让其具有智能机器人的行为,也就是扮演了智能机器人的角色。 DCI在Java中实现并不太优雅,在Ruby或Scala中比较方便,但是因为灵活性太强,导致代码难以理解,我们很多时候是根据代码运行的情况倒推其代码,但是因为运行的代码混合了很多其他代码,导致靠倒推理解其原始代码难度增加。