/**
* 命令模式。
* @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();
}
}
运行结果:
打开。
关闭。