定义
将一个请求封装成对象,从而让你使用不同的请求把客户端参数化,对请求排队或者记录请求日志,可以提供命令的撤销和恢复功能
通用类图如下:

在类图中有三个角色:Receiver执行命令,命令传递链条最终到达这里;Command即声明的命令;Invoker接收并执行命令。
优点
- 类间解耦
Invoker和Receiver区分开,Invoker使用时只需调用Command的execute方法无需关注到底谁哪个接收者 - 可拓展性高
- 结合其他模式可达到更强性能
缺点
当有N个命令时,Command子类会有N个,迅速膨胀
使用场景
模式如其名,只要是你认为是命令的地方就可使用命令模式
拓展
反悔问题
有时候我们会想到:发出一个命令后,想要撤回回滚,怎么办呢?
这里可以有两种方法实现:
- 结合备忘录模式还原状态,此方法适合Receiver只做状态变更而不适合事件处理;
- 增加一个新的命令,实现事件回滚
参考:
设计模式之禅