bigtalk.jpg
第23章 烤羊肉串引来的思考——命令模式
定义
命令模式将一个请求封装成一个对象,不同的请求对应不同的对象,做为客户端使用的参数;可以方便对请求记录日志,以及撤销重做。
优点
便于撤销重做、便于记录日志、便于增添新请求类型、将请求和执行请求的耦合度降低使两者不会相互影响。
实现
- Command: 请求命令抽象类,其中包含抽象接口:
Execute()
- Concrete Command :具体请求命令类,不同的命令有不同的
Execute()
实现;其中也包含 receiver 用于具体执行命令。 - Receiver: 实现请求端,实现不同命令时,在
Execute()
中调用相应的接收者,由接收者具体执行命令。 - Invoker: 接收请求端,接收客户请求的命令Command到一个命令队列中, 记录Command日志,以及调用Command的
Execute()
接口,使得Receiver工作。 - Client: 发送请求端(具体的请求命令基于Command), 将请求添加到Invoker的队列中。
实现类图:
22_commander.png
客户端使用:
22_commander_use.png
另外,敏捷开发原则之一:不要编写基于猜测的实际不需要的功能,不确定是否撤销重构不必使用这个模式,日后需要再重构代码即可。