Command Pattern
阿新 • • 發佈:2020-06-28
Start
An Example
// Command.java
public interface Command {
void execute();
void undo();
}
//LightReceiver public class LightReceiver { public void on(){ System.out.println("The light is on."); } public void off(){ System.out.println("The light is off."); } }
// LightOnCommand.java
public class LightOnCommand implements Command{
LightReceiver light;
public LightOnCommand(LightReceiver light){
this.light = light;
}
public void execute() {
light.on();
}
public void undo() {
light.off();
}
}
// LightOffCommand.java public class LightOffCommand implements Command{ LightReceiver light; public LightOffCommand(LightReceiver light){ this.light = light; } public void execute() { light.off(); } public void undo() { light.on(); } }
// NoCommand.java
///初始化,用於初始化每個按鈕
public class NoCommand implements Command {
public void execute() {
}
public void undo() {
}
}
// RemoteController.java public class RemoteController { Command[] onCommands ; Command[] offCommands; Command undoCommand; public RemoteController(){ onCommands = new Command[5]; offCommands = new Command[5]; for (int i = 0; i <5; i++) { onCommands[i] = new NoCommand(); offCommands[i] = new NoCommand(); } } public void setCommand(int no, Command onCommand, Command offCommand){ onCommands[no] = onCommand; offCommands[no] = offCommand; } public void onButtonWasPushed(int no){ onCommands[no].execute(); undoCommand = onCommands[no]; } public void offButtonWasPushed(int no){ offCommands[no].execute(); undoCommand = offCommands[no]; } public void undoButtonWasPushed(){ undoCommand.undo(); } }
// Client.java
public class Client {
public static void main(String[] args) {
LightReceiver light = new LightReceiver();
LightOnCommand lightOnCommand = new LightOnCommand(light);
LightOffCommand lightOffCommand = new LightOffCommand(light);
RemoteController remoteController = new RemoteController();
remoteController.setCommand(0, lightOnCommand, lightOffCommand);
System.out.println("Light on pushed");
remoteController.onButtonWasPushed(0); //The light is on.
}
}