• 设计模式之命令模式


    public class RemoteLoader {
    
        public static void main(String[] args) {
    
            RemoteControl remoteControl = new RemoteControl();
    
            Light light = new Light("Living Room");
            TV tv = new TV("Living Room");
            Stereo stereo = new Stereo("Living Room");
            Hottub hottub = new Hottub();
     
            LightOnCommand lightOn = new LightOnCommand(light);
            StereoOnCommand stereoOn = new StereoOnCommand(stereo);
            TVOnCommand tvOn = new TVOnCommand(tv);
            HottubOnCommand hottubOn = new HottubOnCommand(hottub);
            LightOffCommand lightOff = new LightOffCommand(light);
            StereoOffCommand stereoOff = new StereoOffCommand(stereo);
            TVOffCommand tvOff = new TVOffCommand(tv);
            HottubOffCommand hottubOff = new HottubOffCommand(hottub);
    
            Command[] partyOn = { lightOn, stereoOn, tvOn, hottubOn};
            Command[] partyOff = { lightOff, stereoOff, tvOff, hottubOff};
      
            MacroCommand partyOnMacro = new MacroCommand(partyOn);
            MacroCommand partyOffMacro = new MacroCommand(partyOff);
     
            remoteControl.setCommand(0, partyOnMacro, partyOffMacro);
      
            System.out.println(remoteControl);
            System.out.println("--- Pushing Macro On---");
            remoteControl.onButtonWasPushed(0);
            System.out.println("--- Pushing Macro Off---");
            remoteControl.offButtonWasPushed(0);
        }
    }

    RemoteControl.java

    public class RemoteControl {
        Command[] onCommands;
        Command[] offCommands;
        Command undoCommand;
     
        public RemoteControl() {
            onCommands = new Command[7];
            offCommands = new Command[7];
     
            Command noCommand = new NoCommand();
            for(int i=0;i<7;i++) {
                onCommands[i] = noCommand;
                offCommands[i] = noCommand;
            }
            undoCommand = noCommand;
        }
      
        public void setCommand(int slot, Command onCommand, Command offCommand) {
            onCommands[slot] = onCommand;
            offCommands[slot] = offCommand;
        }
     
        public void onButtonWasPushed(int slot) {
            onCommands[slot].execute();
            undoCommand = onCommands[slot];
        }
     
        public void offButtonWasPushed(int slot) {
            offCommands[slot].execute();
            undoCommand = offCommands[slot];
        }
    
        public void undoButtonWasPushed() {
            undoCommand.undo();
        }
     
        public String toString() {
            StringBuffer stringBuff = new StringBuffer();
            stringBuff.append("
    ------ Remote Control -------
    ");
            for (int i = 0; i < onCommands.length; i++) {
                stringBuff.append("[slot " + i + "] " + onCommands[i].getClass().getName()
                    + "    " + offCommands[i].getClass().getName() + "
    ");
            }
            stringBuff.append("[undo] " + undoCommand.getClass().getName() + "
    ");
            return stringBuff.toString();
        }
    }

    LightOnCommand.java

    public class LightOnCommand implements Command {
        Light light;
    
        public LightOnCommand(Light light) {
            this.light = light;
        }
    
        public void execute() {
            light.on();
        }
    
        public void undo() {
            light.off();
        }
    }

    Command.java

    public interface Command {
        public void execute();
        public void undo();
    }
  • 相关阅读:
    C# using 实现强制资源清理
    MySQL workbench How to create a new model
    无法启动windows audio服务,错误提示126.
    Process of knowledge discovery in databases
    Android 应用程序中资源的引用
    Javadoc使用方法
    Android xml 布局
    load data with matlab
    Android中string.xml使用总结
    Introduction to Indigo
  • 原文地址:https://www.cnblogs.com/z888/p/5971302.html
Copyright © 2020-2023  润新知