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

