标签:
当请求者无法或不能与接收者直接交流时,使用命令者模式。
以下情况适用命令者模式:程序中,
- 需要排队完成某些逻辑
- 支持撤销操作
- 支持宏操作
4个角色如下:
- 请求者—封装抽象命令引用,发起请求,即命令执行
- 抽象命令—规范命令执行
- 具体命令—命令执行逻辑,封装接收者引用
- 接收者—只负责完成自身逻辑,不含任何引用
请求者作为发起者,发出请求,执行命令
最终,命令驱动接收者作出相应
优点:
- 请求者和接收者相互解耦
- 命令可扩展,符合 “开闭” 原则
- 请求被封装在具体命令内,命令可持久化,则该模式可用于记录日志
- 该模式可延伸至宏命令,实现命令排队,按序执行
劣势:
- 请求者和接收者虽解耦,但请求者和命令、命令和接收者之间存在依赖
- 请求者和接收者并不符合接口设计原则,能扩展,但无规范
此时,接收者角色应提供相应操作的反操作
也算是增加一个角色:具体宏命令
该角色封装抽象命令引用的集合,同时:
- 能按序执行集合内所有命令
- 可支持按需终止或撤销集合内某一命令
—接收者接口
接收者角色也可增加一个抽象接收者,来规范其统一行为
—命令和接收者的对应
一对一 : 一个命令,对应一个接收者,逻辑清晰
多对一 : 但多个命令,一个接收者,也可以
(要求接收者内部分多个逻辑流程,来处理不同命令)
一对多 : 一个命令,多个接收者,也可以
(要求命令封装接收者集合)
命令和接收者间的关系,类似观察者模式
另,多对多,逻辑上合适与否,暂不讨论
java设计模式之命令者模式, 作者 : qq7342272
标签:
原文地址:http://www.cnblogs.com/CoolSoul/p/4984843.html