定义
命令模式将请求封装成对象, 以便使用不同的请求, 队列或日志来参数化其他对象, 命令模式也支持可撤销的操作.
**
- 命令模式将发出请求的对象和执行请求的对象解耦
- 再被解耦的两者之间是通过命令对象进行沟通的, 命令对象封装了接收者的一个或一组动作
- 宏命令是命令的一种简单的延伸, 允许调用多个命令
案例
背景:一个遥控器有很多按钮, 按钮按下, 相应的命令发出, 执行对应的动作, 设计可拓展的系统
结构如下:
设计命令Command接口, 遥控器持有接口的属性, 调用接口的方法, 与具体实现解耦
public interface Command {
void execute();
}
具体命令实现命令接口, 并持有light对象, 在execute方法中实现具体的操作
public class LightOnCommand implements Command {
Light light;
public LightOnCommand(Light light) {
this.light = light;
}
@Override
public void execute() {
light.turnOnLight();
}
}
遥控器可以setCommand, 按下按钮执行execute
public class SimpleRemoteControl {
Command slot;
public SimpleRemoteControl() {
}
public void setCommand(Command command) {
slot = command;
}
public void buttonWasPressed() {
slot.execute();
}
}
测试
@Test
public void testCommand() {
LightOnCommand command = new LightOnCommand(new Light());
SimpleRemoteControl control = new SimpleRemoteControl();
control.setCommand(command);
control.buttonWasPressed();
}
结果:
开灯=========>