设计模式 命令模式
本文将介绍设计模式中的命令模式。
一、什么命令模式?
将一个请求封装为一个对象,从而可用不同的请求对客户进行参数化,对请求排队或者记录请求日志,以及支持可撤销的操作。
命令模式将请求发送者与请求接收者解耦,请求发送者通过命令对象间接引用接收者,使得系统具有更好的灵活性。
二、实现
1. 结构
2. 角色
- Command 抽象命令类:
- 抽象类或接口
- 声明了用于执行请求的
execute()
等方法
- ConcreteCommand 具体命令类:
- 抽象命令类的实现类
- 类中持有对接收者的引用
- 实现了用于执行请求的
execute()
等方法,会在该方法中调用接收者的相应操作
- Invoker 调用者:
- 请求发送者
- Receiver 接收者:
- 接收者负责具体实现命令的处理
3. 简单示例
Command:
1 |
|
ConcreteCommand:
1 |
|
Invoker:
1 |
|
Receiver:
1 |
|
三、宏命令
宏命令是组合模式和命令模式结合的产物。
具体来说,
- 具体命令类中将维护一个集合,集合中的元素均是具体命令类
- 当调用具体命令类时,它将会执行自身的操作,并调用集合中的具体命令类,从而实现递归调用的效果
四、优缺点
1. 优点
- 降低耦合度,请求者和接收者之间不存在直接引用
- 如果希望添加新的命令, 只需要扩展,而不需要修改
2. 缺点
- 会增加系统中类的数量
参考
- 《Java 设计模式》