10.21
命令模式
命令模式(Command Pattern)是一种行为型设计模式,它将请求封装成一个对象,从而允许你使用不同的请求、队列或者日志请求来参数化其他对象。命令模式也支持撤销操作。
下面是一个简单的Java代码示例,演示了命令模式的实现:
// 命令接口
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("Receiver executes the command.");
}
}
// 调用者类
class Invoker {
private Command command;
public void setCommand(Command command) {
this.command = command;
}
public void executeCommand() {
command.execute();
}
}
// 客户端代码
public class CommandPatternExample {
public static void main(String[] args) {
Receiver receiver = new Receiver();
Command command = new ConcreteCommand(receiver);
Invoker invoker = new Invoker();
invoker.setCommand(command);
invoker.executeCommand();
}
}
在上述示例中,我们定义了一个命令接口 Command
,其中包含一个 execute()
方法。
然后,我们实现了具体命令类 ConcreteCommand
,它实现了 Command
接口,并持有一个接收者对象 Receiver
。
接着,我们定义了接收者类 Receiver
,其中包含一个 action()
方法,用于执行实际的操作。
在调用者类 Invoker
中,我们通过 setCommand()
方法设置要执行的命令,然后通过 executeCommand()
方法执行命令。
在客户端代码中,我们创建了接收者对象 receiver
和具体命令对象 command
,并将命令对象设置到调用者对象 invoker
中。最后,调用 invoker.executeCommand()
执行命令。
命令模式的关键思想是将请求封装成一个对象,使得请求的发送者和接收者解耦,从而可以灵活地处理请求、撤销操作或者记录日志等。这种方式可以方便地添加新的命令,支持请求的排队和延迟执行,并可以实现命令的撤销和重做操作。