概念
Command Pattern:将一个请求封装成一个对象,从而让我们可用不同的请求对客户进行参数化;对请求排队或者记录请求日志,以及支持可撤销的操作。
业务出现了 (回退操作)(重做操作)的需求的时候,就可以考虑使用这个模式。
和之前代理模式中的举例有些相似,不过命令模式的本质是对命令进行封装,将发出命令的责任和执行命令的责任分割开。例如遥控器是一个调用者,不同按钮代表不同的命令,而电视是接收者。
使用
1 | var command1 = { |
优点
- 降低系统的耦合度:请求者与接收者之间不存在直接引用,两者之间具有良好的独立性
- 新的命令可以很容易加入到系统中,且不会影响其他类,符合开闭原则
- 可以比较容易地设计一个命令队列或宏命令(组合命令)
- 为请求的撤销和恢复操作提供了一种设计和实现方案
缺点
- 可能导致某些系统有过多的具体命令类:因为针对每一个对请求接收者的调用操作都需要设计一个具体命令类因此在某些系统中可能需要提供大量的具体命令类,这将影响命令模式的设计