2019独角兽企业重金招聘Python工程师标准>>>

背景

外面小摊与店面的比较,你就会发现,店面似乎更加容易管理,为什么呢?因为在客户与老板自己新增了很多员工,这些员工各司其职,所以井然有序,事情才会高效进行。这里有个重要的设计模式就是命令模式。

1、使用意图

在软件系统中,“行为请求者”与“行为实现者”通常呈现一种“紧耦合”。但在某些场合,比如要对行为进行“记录、撤销/重做、事务”等处理,这种无法抵御变化的紧耦合是不合适的。在这种情况下,如何将“行为请求者”与“行为实现者”解耦?将一组行为抽象为对象,实现二者之间的松耦合。这就是命令模式(Command Pattern)。

2、生活实例

服务员就是客户与厨师之间的一种解耦,如果客户自己与厨师之间耦合,其实也是可以实现的,但是缺点就是厨师这个类已经违背了单一职责原则,我们应该让职责划分得更清楚一些,所以增加了服务员。

3、Java 例子(框架、JDK 、JEE)

暂时未发现,如果有同学发现可以修改

4、模式类图

图片引用自:http://www.cnblogs.com/devinzhang/archive/2012/01/06/2315235.html

  1. 接收者角色(Receiver):负责调用具体命令角色,执行命令

  2. 命令角色(Command):定义一个抽象接口,声明所有的命令方法

  3. 具体命令角色(Concrete Command):实现命令角色接口,实现接口中的所有方法,这方法的实现就是命令所要求完成的功能。通常会持有接收者,并调用接收者的功能来完成命令要执行的操作。

  4. 请求者角色(Invoker):要求命令对象执行请求,通常会持有命令对象,可以持有很多的命令对象。这个是客户端真正触发命令并要求命令执行相应操作的地方,也就是说相当于使用命令对象的入口。通过一个集合队列管理命令对象,对命令进行管理,诸如撤销、增加等功能。

  5. 客户角色(Client):直接与接请求者角色联系,并且发出命令(所谓发出命令,实质就是定义一些具体命令角色的对象)。

5、模式优点

命令模式:将一个请求封装为一个对象,从而使你可用不同的请求对客户进行参数化;对请求排队或记录请求日志,以及支持可撤销的操作。

第一:它能较容易地设计一个命令队列;

第二:在需要的情况下,可以较容易地将命令记录日志;

第三:允许接收请求的一方决定是否要否决请求;

第四:可以容易地实现对请求的撤销和重做;

第五:由于加进新的具体命令类不影响其他的类,因此增加新的具体命令类很容易。

命令模式吧请求一个操作的对象与知道怎么执行一个操作的对象分割开。

6、与类似模式比较

不要为代码添加基于猜测的、实际不需要的功能。如果不清楚一个系统是否需要命令模式,一般不要急去实现它,事实上,在需要的时候通过重构实现这个模式并不困难,只有在真正需要如撤销、恢复操作等功能时,把原来的代码重构为命令模式才有意义。

命令模式感觉使用起来稍微有点复杂。

转载于:https://my.oschina.net/heweipo/blog/469575

小菜学设计模式——命令模式相关推荐

  1. 一起学设计模式 - 命令模式

    命令模式(Command Pattern)属于行为型模式的一种,又称为行动(Action)模式或交易(Transaction)模式.将一个请求封装为一个对象,从而达到用不同的请求对客户进行参数化,对于 ...

  2. Python设计模式-命令模式

    Python设计模式-命令模式 代码基于3.5.2,代码如下; #coding:utf-8 #命令模式class barbecuer():def bakeButton(self):print(&quo ...

  3. 设计模式 命令模式 实例_根据您的命令-命令设计模式

    设计模式 命令模式 实例 命令设计模式是一种广为人知的设计模式,属于行为设计模式("四人帮"的一部分). 顾名思义,它与应用程序中的动作和事件有关. 问题陈述: 假设有一个网页将在 ...

  4. C语言设计模式——命令模式

    C语言设计模式--命令模式 好处:让代码清晰明了,容易添加和删除,易维护. 哪些地方会用到命令模式?(列出几个常见的例子) 1.按键处理,每个按键按下得到一个索引(指的就是命令),一个按键对应一个处理 ...

  5. C语言实现设计模式—命令模式

    文章目录 C语言设计模式--命令模式 传统的实现方式如下:(伪代码) 命令模式优化 UML 用例说明 实现流程 command.h command.c main 总结 C语言设计模式--命令模式 好处 ...

  6. 游戏设计模式 - 命令模式在Unity中的应用(C#)

    游戏设计模式 - 命令模式在Unity中的应用(C#) 实测:这是一篇简单易懂的文章-> https://zhuanlan.zhihu.com/p/46937284

  7. C++设计模式——命令模式(command pattern)

    一.原理讲解 别名动作(action),事务(transaction). 1.1意图 将一个请求封装为一个对象,从而使我们可用不同的请求对客户进行参数化,对请求排队或记录请求日志,以及支持可撤销的操作 ...

  8. 游戏设计模式---命令模式

    命令模式 游戏设计模式Design Patterns Revisited 命令模式是我最喜欢的模式之一. 大多数我写的游戏或者别的什么之类的大型程序,都会在某处用到它. 当在正确的地方使用时,它可以将 ...

  9. [Head First设计模式]餐馆中的设计模式——命令模式

    系列文章 [Head First设计模式]山西面馆中的设计模式--装饰者模式 [Head First设计模式]山西面馆中的设计模式--观察者模式 [Head First设计模式]山西面馆中的设计模式- ...

最新文章

  1. 市场有变,中小型基因测序机构机会来了
  2. ffmpeg实现将MP4格式转封装成avi格式
  3. selenium的三种等待时间
  4. 没有它,我们寸步难行——LBS的渊源与实践
  5. java 路由器接口的作用是什么_路由器的接口和用途
  6. [Asp.net]常见word,excel,ppt,pdf在线预览方案,有图有真相,总有一款适合你!(续)...
  7. 《软件项目管理案例教程》应考概念要点及重点整理
  8. 02.CCNA 200-301 题库_51-100
  9. ORA-00932: 数据类型不一致:应为-,但却获得NCLOB
  10. 大于号html语言怎么写,在HTML中使用大于号、小于号、空格等字符
  11. Android--DES加密解密
  12. PAT 1037 在霍沃茨找零钱
  13. Project-Euler-045思维
  14. 金仓数据库 KingbaseES Sys_repack 解决金仓数据库 KingbaseES 表膨胀的问题
  15. Lottie动画(二)Lottie动画制作
  16. 再仔细读读react18官方文档吧 20220526
  17. linux 怎么看节点核数,Linux怎么查看CPU核数?-linux运维
  18. 【树状数组】【P5069】[Ynoi2015]纵使日薄西山
  19. param name=robot_description command= $(find xacro)/xacro --inorder ' $(arg model)' 到底什么意思
  20. 京东首曝无人仓 四款机器人引爆智慧物流黑科技

热门文章

  1. PowerShell2.0之桌面计算机维护(九)磁盘管理
  2. Vue父组件和子组件之间传递数据
  3. 购物中心定位分析、调整方案及租金建议
  4. C 的异常捕捉实现
  5. 【转】Weblogic的集群
  6. 解决table边框在打印中不显示的问题
  7. Android的WebView控件载入网页显示速度慢的究极解决方案
  8. android程序排序算法实现
  9. 鞋企立足信息化建设 力争突破发展瓶颈
  10. 一篇文章带你搞懂JS对象的自我销毁