Java代码
package command.example;
/**
*
*作者:alaric
*时间:2013-8-21上午7:43:14
*描述:控制类
*/
public class Control {
private Command fistCommand;
private Command kickCommand;
private Command moveCommand;
public Control(Command fistCommand, Command kickCommand, Command moveCommand) {
super();
this.fistCommand = fistCommand;
this.kickCommand = kickCommand;
this.moveCommand = moveCommand;
}
public void fist(){
fistCommand.execute();
}
public void kick(){
kickCommand.execute();
}
public void move(){
moveCommand.execute();
}
}
Java代码
package command.example;
/**
*
*作者:alaric
*时间:2013-8-20下午9:26:42
*描述:客户端角色
*/
public class Client {
/**
*作者:alaric
*时间:2013-8-20下午9:26:36
*描述:测试
*/
public static void main(String[] args) {
GameMachine machine = new GameMachine();
Command fistCommand = new FistCommand(machine);
Command kickCommand = new KickCommand(machine);
Command moveCommand = new MoveCommand(machine, "左");
Control control = new Control(fistCommand, kickCommand, moveCommand);
control.fist();
control.kick();
control.move();
//其实在不同命令模式的情况下就是下面这样直接调用,
//就会让调用者和实际命令执行者紧紧耦合在一起,还有一个好处
//就是可以在
//machine.fist();
//machine.kick();
//machine.move("左");
}
}
运行结果如下:
出拳
出脚
向左移动
通过上面代码可以看出,本来客户端可以直接调用接收者来执行动作的,现在在中间引入了命令,这些命令由调用者(Invoker这里是Control)来调用,从而对客户端和命令接收者解耦了,增加了命令后,使得命令除了execute方法外,可以插入很多其它动作,比如redo,undo,或者记录日志等。 |