HeadFirst設計模式-命令模式

 

 

 命令模式,將方法調用封裝起來了。

Java例子:

package f_CommandPattern._01_demo;

public interface Command {
    public void execute();
    public void undo();
}
//--------------------------------------
package f_CommandPattern._01_demo;

//Invoker 調用者
public class SimpleRemoteControl {
    private Command command;
    public SimpleRemoteControl() {
    }
    public void setCommand(Command command) {
        this.command = command;
    }
    public void buttonWasPressed() {
        command.execute();
    }
}

//--------------------------------------
package f_CommandPattern._01_demo;

public class LightOnCommand implements Command {
    
    private Light light;
    
    public LightOnCommand(Light light) {
        this.light = light;
    }

    @Override
    public void execute() {
        light.on();
    }

    @Override
    public void undo() {
        light.off();
    }

}
//--------------------------------------
package f_CommandPattern._01_demo;

public class LightOffCommand implements Command {
    private Light light;
    
    public LightOffCommand(Light light) {
        this.light = light;
    }

    @Override
    public void execute() {
        light.off();
    }

    @Override
    public void undo() {
        light.on();
    }

}
//--------------------------------------
package f_CommandPattern._01_demo;
//receiver 接收者
public class Light {
    private String roomName;
    public Light() {
        
    }
    public Light(String roomName) {
        this.roomName = roomName;
    }
    public void on() {
        System.out.println(this.roomName + " light is on...");
    }
    public void off() {
        System.out.println(this.roomName + " light is off...");
    }
}
//--------------------------------------
package f_CommandPattern._01_demo;
//宏命令,多個命令的組合
public class MacroCommand implements Command {
    
    private Command[] commands;
    
    public MacroCommand(Command[] commands) {
        this.commands = commands;
    }

    @Override
    public void execute() {
        for (Command cmd : commands) {
            cmd.execute();
        }
    }

    @Override
    public void undo() {
        // TODO Auto-generated method stub

    }

}
//--------------------------------------
package f_CommandPattern._01_demo;

public class NoCommand implements Command {

    @Override
    public void execute() {
        System.out.println("no command...");
    }

    @Override
    public void undo() {
        
    }

}
//--------------------------------------
package f_CommandPattern._01_demo;

public class TestDemo {
    public static void main(String[] args) {
        SimpleRemoteControl remote = new SimpleRemoteControl();
        Light light = new Light();
        GarageDoor garageDoor = new GarageDoor();
        LightOnCommand lighton = new LightOnCommand(light);
        GarageDoorOpenCommand gdoc = new GarageDoorOpenCommand(garageDoor);
        remote.setCommand(lighton);
        remote.buttonWasPressed();
        remote.setCommand(gdoc);
        remote.buttonWasPressed();
    }
}
//--------------------------------------
View Code

 

 

**

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章