本文共 2070 字,大约阅读时间需要 6 分钟。
本文转载自:
命令模式(Command Pattern)是一种数据驱动的设计模式,它属于行为型模式。请求以命令的形式包裹在对象中,并传给调用对象。调用对象寻找可以处理该命令的合适的对象,并把该命令传给相应的对象,该对象执行命令。
将命令封装成对象中,具有以下作用:
 
   设计一个遥控器,可以控制电灯开关。
 
   public interface Command {       void execute();}   public class LightOnCommand implements Command {       Light light;    public LightOnCommand(Light light) {           this.light = light;    }    @Override    public void execute() {           light.on();    }}   public class LightOffCommand implements Command {       Light light;    public LightOffCommand(Light light) {           this.light = light;    }    @Override    public 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.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();    }}   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);    }}