- 概述 命令模式(Command Pattern)是一种行为设计模式,它将请求封装成对象,从而使你可以用不同的请求、队列或者日志来参数化其他对象。命令模式也支持可撤销的操作。
- 适用场景 需要将请求发送者和接收者解耦。 需要支持撤销操作。 需要记录请求日志。 需要支持事务操作。
- 命令模式的结构 命令模式涉及以下几个角色: Command(命令):声明执行操作的接口。 ConcreteCommand(具体命令):将一个接收者对象绑定于一个动作,调用接收者的相应操作,以实现Execute操作。 Receiver(接收者):知道如何实施与执行一个请求相关的操作。任何类都可能作为一个接收者。 Invoker(调用者):要求该命令执行这个请求。 Client(客户):创建具体命令对象并设定其接收者。
- 示例代码 假设我们有一个简单的电视遥控器系统,可以实现打开、关闭和调整音量的功能。 4.1 定义命令接口
4.2 创建具体命令类
4.3 创建接收者类
4.4 创建调用者类
4.5 创建空命令类
4.6 客户端代码
- 代码解释 Command 接口:定义了 execute 和 undo 方法,所有具体命令都需要实现这两个方法。 ConcreteCommand 类:实现了 Command 接口的具体命令类,每个命令类封装了一个接收者对象,并调用接收者的相应方法。 Receiver 类:知道如何实施与执行一个请求相关的操作,这里是 TV 类。 Invoker 类:调用者类 RemoteControl,它持有一系列命令对象,并在接收到请求时调用相应的命令对象的 execute 方法。 Client 类:客户端代码 RemoteLoader,负责创建具体命令对象并设置到调用者中。
- 优点 解耦:将请求的发送者和接收者解耦,使得请求的发送者不需要知道请求的接收者是谁,也不知道请求是如何被处理的。 扩展性:可以很容易地增加新的命令,而不会影响现有的代码。 支持撤销操作:通过在命令对象中保存状态,可以很容易地实现撤销操作。 支持日志记录:可以将命令对象序列化并存储起来,以便后续恢复。
- 缺点 增加类的数量:每个具体命令都需要一个单独的类来实现,这可能会导致类的数量增加。 复杂性:对于简单的操作,使用命令模式可能会显得过于复杂。

3373

被折叠的 条评论
为什么被折叠?



