命令模式(Command Pattern)是一种行为型设计模式,它将请求封装成一个对象,从而使用户能够用不同的请求对客户端进行参数化。这种模式可以将请求的发送者和接收者解耦,并且可以将请求保存在队列中、记录日志、撤销操作等。
在命令模式中,有以下几个关键角色:
- 命令(Command):定义了执行操作的接口,通常包含一个执行(execute)方法。
- 具体命令(Concrete Command):实现了命令接口,具体定义了执行操作的方法。
- 接收者(Receiver):执行命令所绑定的操作。
- 调用者(Invoker):负责调用命令对象执行请求。
- 客户端(Client):创建具体命令对象并设置其接收者。
下面是一个简单的示例,展示了命令模式的应用:
// 命令接口
interface Command {
void execute();
}
// 具体命令类
class ConcreteCommand implements Command {
private Receiver receiver;
public ConcreteCommand(Receiver receiver) {
this.receiver = receiver;
}
public void execute() {
receiver.action();
}
}
// 接收者类
class Receiver {
public void action() {
System.out.println("接收者执行操作");
}
}
// 调用者类
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();
}
}
在上述示例中,命令模式的核心是将请求封装成一个命令对象(ConcreteCommand
),并将命令对象与接收者对象(Receiver
)进行绑定。调用者对象(Invoker
)负责调用命令对象的执行方法,从而触发接收者执行相应的操作。
通过使用命令模式,可以实现请求的发送者和接收者之间的解耦,以及对请求进行参数化、记录日志、撤销操作等功能。