/**
* 指令模式。
* @author Bright Lee
*/
public class CommandPattern {
public static void main(String[] args) {
Receiver receiver = new Receiver();
Command cmd001 = new OnCommand(receiver);
Command cmd002 = new OffCommand(receiver);
Invoker invoker = new Invoker();
invoker.setCommand(cmd001);
// 這個調用者持有一個指令對象,在某個時間點調用
// 指令對象的execute()方法,将請求付諸實施:
invoker.invoke();
invoker.setCommand(cmd002);
invoker.invoke();
}
}
/**
* 接收者。負責執行具體的業務邏輯,所有的對象都可以成為接收者。
*/
class Receiver {
public void on() {
System.out.println("打開。");
}
public void off() {
System.out.println("關閉。");
}
}
/**
* 指令接口。
*/
interface Command {
public void execute();
}
/**
* 開指令。
*/
class OnCommand implements Command {
private Receiver receiver;
public OnCommand(Receiver receiver) {
this.receiver = receiver;
}
public void execute() {
receiver.on();
}
}
/**
* 關指令。
*/
class OffCommand implements Command {
private Receiver receiver;
public OffCommand(Receiver receiver) {
this.receiver = receiver;
}
public void execute() {
receiver.off();
}
}
/**
* 調用者。
*/
class Invoker {
private Command command;
public void setCommand(Command command) {
this.command = command;
}
public void invoke() {
command.execute();
}
}
運作結果:
打開。
關閉。