命令模式
About 1 min
请求以命令的形式包裹在对象中,并传给调用对象。调用对象寻找可以处理该命令的合适的对象,并把该命令传给相应的对象,该对象执行命令。
命令模式的主要角色包括:
- 命令接口 Command: 声明执行操作的接口
- 具体命令 ConcreteCommand: 实现执行操作的具体命令类。包含了对接收者的引用,通过调用接收者的方法来完成请求的处理。
- 请求者 Invoker: 要求命令对象执行请求
- 接受者 Receiver: 知道如何执行与执行请求相关的操作
特点
- 将请求者与接收者分离
- 容易扩展新的命令,不用修改已有类
- 命令对象可以进行功能扩展,如撤销、记录、排队等
代码实现
命令接口
public interface Command {
public void 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("Called Receiver.action()");
}
}
调用者
调用者用于发送命令,通过将请求传递给命令对象来实现。
public class Invoker {
private Command command;
public void setCommand(Command command) {
this.command = command;
}
public void executeCommand() {
command.execute();
}
}
测试
public class Client {
public static void main(String[] args) {
Receiver receiver = new Receiver();
Command command = new ConcreteCommand(receiver);
Invoker invoker = new Invoker();
invoker.setCommand(command);
invoker.executeCommand();
}
}