请求以命令的形式包裹在对象中,并传给调用对象。调用对象寻找可以处理该命令的合适的对象,并把该命令传给相应的对象,该对象执行命令。
Class Diagram
- Command:命令接口
- Receiver:命令接收者,也就是命令真正的执行者
- Invoker:组织命令
 
Implementation
命令接口
| 12
 3
 
 | public interface Command {void execute();
 }
 
 | 
命令接收者(灯泡)
| 12
 3
 4
 5
 6
 7
 8
 9
 10
 
 | public class Light {public void on(){
 System.out.println("Light is on!");
 }
 
 public void off(){
 System.out.println("Light is off!");
 }
 }
 
 
 | 
实际命令
| 12
 3
 4
 5
 6
 7
 8
 9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 
 | public class LightOnCommand implements Command {Light light;
 
 public LightOnCommand(Light light) {
 this.light = light;
 }
 
 public void execute() {
 light.on();
 }
 }
 
 public class LightOffCommand implements Command {
 Light light;
 
 public LightOffCommand(Light light) {
 this.light = light;
 }
 
 public void execute() {
 light.off();
 }
 }
 
 | 
命令组织者(遥控器)
| 12
 3
 4
 5
 6
 7
 8
 9
 10
 11
 12
 13
 14
 15
 16
 17
 18
 19
 20
 21
 22
 23
 24
 25
 26
 
 | public class Invoker {private Command[] onCommands;
 private Command[] offCommands;
 private final int slotNum = 7;
 
 public Invoker() {
 this.onCommands = new Command[slotNum];
 this.offCommands = 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();
 }
 }
 
 | 
测试
| 12
 3
 4
 5
 6
 7
 8
 9
 10
 11
 12
 13
 14
 
 | public class CommandTest {
 @Test
 public void test()throws Exception{
 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);
 }
 }
 
 | 
Example