设计模式——命令模式
一、概念:将一个请求封装为一个对象,从而使你可用不同的请求对客户进行参数化;对请求排队或记录请求日志,以及支持可撤销的操作。
二、UML示意图
Command是一个命令抽象类,定义了Excute抽象方法,具体命令类持有一个接受者Receiver对象,并实现Excute方法根据不同的命令执行Receiver对象不同的方法。Invoker可以接受客户端发出的命令,并执行这个命令通知Receiver执行特定方法。
具体流程则是:客户端对Invoker发出命令,Invoker接受命令并执行这个命令,通知Receiver执行Operation方法。在这过程中根据需求甚至可以实现记录日志的功能,若想撤销命令也可以提供撤销命令的方法。
三、优缺点
优点:
- 符合单一职责原则,Invoker、Client、Command、Receiver各自完成自己的工作。
- 降低了耦合度。
- 提供了扩展性。增加新的命令很简单,只需要增加新的具体命令类就可以了,不需要修改原代码,符合开闭原则。
- 可以很方便的实现记录日志,命令撤销功能。
缺点:
- 使用命令模式可能会导致某些系统有过多的具体命令类。