命令模式(Command Pattern)是一种行为型设计模式,它将请求封装成一个对象,并且可以对请求进行排队、记录日志、撤销等处理。这种模式可以将请求的发送者和接收者解耦,从而提高系统的灵活性和可扩展性。
命令模式中通常包含四个角色:文章源自新逸网络-https://www.xinac.net/9362.html
1. Command(命令):定义命令的接口,包含执行命令的方法 `execute()`。文章源自新逸网络-https://www.xinac.net/9362.html
2. ConcreteCommand(具体命令):实现命令接口,定义具体的执行方法。文章源自新逸网络-https://www.xinac.net/9362.html
3. Invoker(调用者):负责调用命令对象执行请求。可以持有多个命令对象,可以将命令对象存储在队列中,从而实现请求的排队和撤销等功能。文章源自新逸网络-https://www.xinac.net/9362.html
4. Receiver(接收者):负责接收命令并执行相应的操作。文章源自新逸网络-https://www.xinac.net/9362.html
下面是一个简单的 Java 实现命令模式的示例:文章源自新逸网络-https://www.xinac.net/9362.html
// 命令接口 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(); } }
在上面的示例中,命令接口定义了 `execute()` 方法,具体命令实现了该方法,并且持有接收者的引用,接收者负责执行具体的操作。调用者持有命令对象,并且通过调用 `executeCommand()` 方法来调用命令对象的 `execute()` 方法。文章源自新逸网络-https://www.xinac.net/9362.html
命令模式的优点是将请求的发送者和接收者解耦,使得系统更加灵活和可扩展。同时,由于命令对象可以被存储在队列中,可以实现请求的排队、记录日志、撤销等操作。但是需要注意的是,由于每个命令对象都需要实现一个接口,因此会增加系统的复杂度和代码量。文章源自新逸网络-https://www.xinac.net/9362.html 文章源自新逸网络-https://www.xinac.net/9362.html
评论