《Head First 设计模式》之命令模式——遥控器
阅读原文时间:2023年09月23日阅读:5

命令模式(Command)

  ——将“请求”封装成对象,以便使用不同的请求、队列或者日志来参数化其他对象。命令模式也支持可撤销的操作。

  • 要点
  1. 将发出请求的对象和执行请求的对象解耦。
  2. 被解耦的两者之间通过命令对象进行沟通。命令对象封装了接收者和一个或一组动作。
  3. 调用者通过调用命令对象的execute()发出请求,使得接收者的动作被调用。
  4. 通过实现一个undo()方法撤销命令。还可以使用一个堆栈记录操作过程的每一个命令,实现多步撤销。
  5. 宏命令允许调用多个命令,也支持撤销。
  6. 命令也可以用来实现日志和事务系统。

interface Command {
public void execute();
}

class Light {
public void on() {
System.out.println("light on");
}

public void off() {
System.out.println("light off");
}
}

class LintOnCommand implements Command {
Light light;

public LintOnCommand(Light light) {
this.light = light;
}

@Override
public void execute() {
light.on();
}

}

class SimpleRemoteControl {
Command command;

public SimpleRemoteControl() {}

public void setCommand(Command command) {
this.command = command;
}

public void buttonWasPressed() {
command.execute();
}
}

public class Test {
public static void main(String[] args) {
SimpleRemoteControl control = new SimpleRemoteControl();
Light light = new Light();
LintOnCommand onCommand = new LintOnCommand(light);

 control.setCommand(onCommand);  
 control.buttonWasPressed();  

}
}