DCI中角色注入的问题



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数据又具有听、看、感觉的行为?

应该是智能机器人的构造函数能够接受机器人这个参数。 智能机器人是自己去实现这些行为,然后将状态保存在机器人而已。机器人打架之前有10升油,然后派一个智能机器人去打架用掉自己6升油,打完架之后还剩4升油。

好吧,我把代码贴全一些。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();
}


基本如gameboyLV所说,这里将机器人和智能机器人分开,机器人没有能力行为,而智能机器人有能力行为,可以听说感觉等。智能机器人可以看成机器人在一定场合下需要扮演的角色。比如在排爆场景下,需要机器人有能力行为,这时我们就将智能机器人的行为注入到机器人中,让其具有智能机器人的行为,也就是扮演了智能机器人的角色。

DCI在Java中实现并不太优雅,在Ruby或Scala中比较方便,但是因为灵活性太强,导致代码难以理解,我们很多时候是根据代码运行的情况倒推其代码,但是因为运行的代码混合了很多其他代码,导致靠倒推理解其原始代码难度增加。