结构图
模式说明
- 扩展点在多个不同的ConcreteCommand可以用来实现Command接口。
- Invoker可以用来管理一个或者多个Command对象。
- 客户端使用Invoker去调用具体的Command对象或者Command对象集合。
- 将一个请求封装为一个对象,从而使你可用不同的请求对客户进行参数化,可以对请求排队或记录请求日志,以及支持可撤销的操作。
public static void main(String[] args) {
Receiver r = new Receiver();
Command c = new ConcreteCommand(r);
Invoker i = new Invoker();
i.setCommand(c);
i.executeCommand();
}
类设计
public interface Command {
public void execute();
}
public class Invoker {
private Command command;
public void setCommand(Command command) {
this.command = command;
}
public void executeCommand() {
command.execute();
}
}
public class ConcreteCommand implements Command {
private Receiver receiver;
public ConcreteCommand(Receiver receiver) {
this.receiver = receiver;
}
@Override
public void execute() {
receiver.action();
}
}
public class Receiver {
public void action() {
System.out.println("receiver do the action.");
}
}