定义:命令模式把一个请求或者操作封装到一个对象中。命令模式允许系统使用不同的请求把客户端参数化,对请求排队或者记录请求日志,可以提供命令的撤销和恢复功能。
用自己的话说:把真正操作的实体封装到命令里面,通过命令对实体进行真正的操作。
代码:
定义一个真正操作的实体类:
public class GarageDoor {
public void up(){
System.out.println("升门");
}
public void down(){
System.out.println("降门");
}
public void stop(){
System.out.println("门停");
}
public void lightOn(){
System.out.println("开灯");
}
public void lightOff(){
System.out.println("关灯");
}
}
定义一个命令接口:
public interface Command {
public void execute();
}
定义一个命令的实现:
public class GarageDoorOpenCommand implements Command {
private GarageDoor garageDoor;
/**
*
*/
public GarageDoorOpenCommand(GarageDoor garageDoor) {
//
this.garageDoor=garageDoor;
}
/* (非 Javadoc)
* @see com.jjt.command.Command#execute()
*/
@Override
public void execute() {
// TODO 自动生成的方法存根
this.garageDoor.lightOn();
this.garageDoor.up();
this.garageDoor.stop();
this.garageDoor.down();
this.garageDoor.lightOff();
}
}
定义一个命令执行者,在这里,我模拟定义了一个遥控器:
public class SimpleRemoteControl {
private Command slot;
/**
*
*/
public SimpleRemoteControl() {
// TODO 自动生成的构造函数存根
}
public void setCommand(Command command){
slot=command;
}
public void buttoWasPressed(){
slot.execute();
}
}
测试:
public static void main(String[] args){
SimpleRemoteControl remote = new SimpleRemoteControl();//实际执行的调用者
GarageDoor garageDoor = new GarageDoor();//实际的执行者
GarageDoorOpenCommand garaDoorOpenCommand = new GarageDoorOpenCommand(garageDoor);//创建一个命令
remote.setCommand(garaDoorOpenCommand);//把命令交给遥控器管理
remote.buttoWasPressed();//使用遥控器
}
结果:
开灯
升门
门停
降门
关灯