码迷,mamicode.com
首页 > 其他好文 > 详细

理解设计模式(命令者)

时间:2015-11-21 22:42:50      阅读:169      评论:0      收藏:0      [点我收藏+]

标签:

  当请求者无法或不能与接收者直接交流时,使用命令者模式。

特定环境下一类问题

以下情况适用命令者模式:程序中,

  • 需要排队完成某些逻辑
  • 支持撤销操作
  • 支持宏操作

解决方案

4个角色如下:

  • 请求者—封装抽象命令引用,发起请求,即命令执行
  • 抽象命令—规范命令执行
  • 具体命令—命令执行逻辑,封装接收者引用
  • 接收者—只负责完成自身逻辑,不含任何引用

请求者作为发起者,发出请求,执行命令

最终,命令驱动接收者作出相应

优劣

优点:

  • 请求者和接收者相互解耦
  • 命令可扩展,符合 “开闭” 原则
  • 请求被封装在具体命令内,命令可持久化,则该模式可用于记录日志
  • 该模式可延伸至宏命令,实现命令排队,按序执行

劣势:

  • 请求者和接收者虽解耦,但请求者和命令、命令和接收者之间存在依赖
  • 请求者和接收者并不符合接口设计原则,能扩展,但无规范

命令的撤销或终止

此时,接收者角色应提供相应操作的反操作

宏命令

也算是增加一个角色:具体宏命令

该角色封装抽象命令引用的集合,同时:

  • 能按序执行集合内所有命令
  • 可支持按需终止或撤销集合内某一命令

延伸

—接收者接口

接收者角色也可增加一个抽象接收者,来规范其统一行为

—命令和接收者的对应
一对一 : 一个命令,对应一个接收者,逻辑清晰

多对一 : 但多个命令,一个接收者,也可以
(要求接收者内部分多个逻辑流程,来处理不同命令)

一对多 : 一个命令,多个接收者,也可以
(要求命令封装接收者集合)

命令和接收者间的关系,类似观察者模式

另,多对多,逻辑上合适与否,暂不讨论

参考

java设计模式之命令者模式, 作者 : qq7342272

理解设计模式(命令者)

标签:

原文地址:http://www.cnblogs.com/CoolSoul/p/4984843.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!