命令模式(六)小结
我们第一次解除命令模式是在第一季的时候,决定版架构总的Command对象撑起了整个Controller的交互逻辑的职责。
其职责如下:
- 操作Model、System
- 可以发送Event
命令模式定义
最开始,我们学习了命令模式的定义,如下:
- 将请求封装成对象,可以将客户端的不同请求参数化,并配合队列、记录、复原等方法来执行请求操作。
接着简单聊了一下架构中的Command,其优点如下
- 专注操作Model与System,使Controller不再那么臃肿
- 逻辑以对象为单位进行管理,可以实现比较复杂的功能
命令模式的参数化和撤销
Command参数化非常简单,仅仅只是在Command构造上传参即可。
接着我们用Command实现了撤销功能,也非常简单,仅仅是在ICommand上增加Undo即可。
命令与执行隔离
我们从命令与执行隔离的角度介绍了:方法、事件机制、Command的实现,三者区别如下:
- 方法:命令与执行在一起(没有分离)
- Command:执行在Command内部实现(有分离)
- 事件机制:执行在事件注册中实现(有分离)
以上是空间上的隔离,我们还介绍了时间上的隔离,比如Command之间的隔帧执行和延时执行等。
经典命令模式
- Invoker:调用者,管理者
- Receiver:接受者
- Command:接口
- ConcreteCommand:实现
经典命令模式的优点
- Invoker和Receiver解耦
- 可以扩展Command
- Invoker可以做定制,可以支持:队列、记录、复原、行为树等。
命令模式与开闭原则
- 一个类应该对扩展开放、对修改关闭
并且用开闭原则去分析了一般的命令系统,如下:
- Invoker:关闭修改
- Receiver:关闭内部修改,开放实现与方法的扩展
- Command:扩展的标准
- ConcreteCommand:开放实现的扩展
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 ATAO2017,阿宅创造奇迹!!


