Command Pattern是什么意思,可以帮我找一个用java实现的例子吗
时间: 2024-04-14 16:27:57 浏览: 25
命令模式(Command Pattern)是一种行为设计模式,它将请求和实际执行该请求的操作解耦,使得请求的发送者和接收者不直接交互。该模式通过将请求封装成一个对象,从而可以对请求进行参数化、队列化、记录日志、撤销和重做等操作。
在命令模式中,有四个核心角色:
- Command(命令):声明执行操作的接口。
- ConcreteCommand(具体命令):实现命令接口,负责执行具体的操作。
- Receiver(接收者):负责实际执行操作的对象。
- Invoker(调用者):负责调用命令对象并执行相应的操作。
下面是一个使用 Java 实现的命令模式示例:
```java
// 定义命令接口
interface Command {
void execute();
}
// 具体命令类
class ConcreteCommand implements Command {
private Receiver receiver;
public ConcreteCommand(Receiver receiver) {
this.receiver = receiver;
}
@Override
public void execute() {
receiver.action();
}
}
// 接收者类
class Receiver {
public void action() {
System.out.println("Receiver: 执行操作");
}
}
// 调用者类
class Invoker {
private Command command;
public void setCommand(Command command) {
this.command = command;
}
public void executeCommand() {
command.execute();
}
}
public class Main {
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` 实现了该接口并持有一个接收者对象。调用者类 `Invoker` 可以设置具体的命令,并通过调用 `executeCommand` 方法执行命令。执行命令时,调用者会委托具体的命令对象调用接收者的操作方法。这样就实现了命令的发送者和接收者的解耦,并且可以方便地扩展和管理命令。
相关推荐
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![zip](https://img-home.csdnimg.cn/images/20210720083736.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)
![](https://csdnimg.cn/download_wenku/file_type_ask_c1.png)