DCI中角色注入的问题

13-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();
} 
<p>

这里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();
}

<p>

banq
2013-08-27 09:02

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

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