目的
将命令封装成对象中,具有以下作用:
- 使用命令来参数化其他对象
- 将命令放入队列中进行排队
- 将命令的操作记录到日志中
- 支持可撤销的操作
类图
- Command: 命令
- Receiver: 命令接收者,也就是命令真正的执行者
- Invoker: 通过它来调用命令
- Client: 可以设置命令与命令的接收者

实现
设计一个遥控器,可以控制电灯开关。
public interface Command{void execute();}public class LightOnCommand implements Command{Light light;public LightOnCommand(Light light){this.light = light;}@Overridepublic void execute(){light.on();}}public class LightOffCommand implements Command{Light light;public LightOffCommand(Light light){this.light = light;}@Overridepublic void execute(){light.off();}}public class Light{public void on(){System.out.println("Light is on!");}public void off(){System.out.println("Light is off!");}}//遥控器public class Invoker{private Command[] onCommands;private Command[] offCommands;private final int slotNum = 7;public Invoker(){this.onCommand = new Command[slotNum];this.offCommand = new Command[slotNum];}public void setOnCommand(Command command, int slot){onCommands[slot] = command;}public void setOffCommand(Command command, int slot){offCommands[slot] = command;}public void onButtonWasPushed(int slot){onCommands[slot].execute();}public void offButtonWasPushed(int slot){offCommands[slot].execute();}}public class Client{public static void main(String[] args){Invoker invoker = new Invoker();Light light = new Light();Command lightOnCommand = new LightOnCommand(light);Command lightOffCommand = new LightOffCommand(light);invoker.setOnCommand(lightOnCommand, 0);invoker.setOffCommand(lightOffCommand, 0);invoker.onButtonWasPushed(0);invoker.offButtonWasPushed(0);}}
