- 目的 : 将一个请求封装为一个对象,从而使你可用不同的请求对客户进行参数化;对请求排队或记录请求日志,以及支持可撤销的操作。
- 核心 : 定义命令接口(含
execute()方法)。具体命令对象封装了接收者对象和动作。调用者(Invoker)持有命令对象并调用其execute()。客户端配置调用者和具体命令。 - 场景 :常用于实现撤销(Undo)功能,如文本编辑器的撤销操作.
首先得有一个接收者
java
package command;
/*
接收者类,负责执行具体的操作
命令模式解耦的是"调用者"与"接收者",而不是"命令"与"接收者"
*/
public class Receiver {
public void action(){
System.out.println("receiver do something.");
}
}
然后有一个命令接口
java
package command;
//命令接口,定义执行操作的统一方法
public interface ICommand {
void execute();
}
接着是具体命令类
java
package command;
// 具体命令类,实现命令接口,绑定接收者
public class ConcreteCommand implements ICommand {
private Receiver receiver;
public ConcreteCommand(Receiver receiver) {
this.receiver = receiver; // 依赖注入
}
// 执行命令,调用接收者的具体操作
@Override
public void execute() {
this.receiver.action(); // 命令绑定接收者
}
}
最后就是我们的调用者了
java
package command;
// 调用者类,负责调用命令
public class Invoker {
private ICommand command;
public Invoker(ICommand command){
this.command = command;
}
public void invoke(){ // 调用命令执行
this.command.execute();
}
}
函数入口
java
package command;
public class MainTest {
public static void main(String[] args) {
Receiver receiver = new Receiver(); // 创建接收者
ICommand command = new ConcreteCommand(receiver); // 创建命令对象,并绑定接收者
Invoker invoker = new Invoker(command); // 创建调用者,并设置命令
invoker.invoke(); // 调用命令执行
}
}
