命令设计模式

命令设计模式:将一个操作封装到对象中,然后创建多个这种带有不同操作的对象(它们都执行了一个相同接口)并将它们封装到一个类中,然后该类根据不同的入参调用不同的对象执行其对应的操作。

命令设计模式与策略模式的区别

-- 相同点:

   -- 毫无疑问,第一个相同点肯定是:封装变化。策略模式封装算法的变法,命令模式封装请求的变化。

   -- 都使用组合来实现功能,达到解耦的目的。

   -- 如果我们将命令模式做更高层次上的抽象,可以将它看成是一种策略模式。如:我们将Client与

      Invoker封装到一起,将Concrete Command与Receiver封装到一起。

-- 策略(Strategy)模式:

   -- 策略模式实际上比较简单。Head First Design Pattern介绍的第一个模式就是策略模式。

   -- GoF定义:定义一组算法,把他们封装起来,并且是他们可以相互替换。该模式使算法可以独立于使

      用它的客户而变化。

   -- 实现:其实一句话就可以说明该模式的精髓:面向抽象编程。用户维护一个该系列算法的统一接口,

      可以互相替换的算法实现该接口。从而将客户与具体的算法实现解耦。

-- 命令(Command)模式:

   -- 命令模式要比策略模式复杂一些。这可以从命令模式结构图(在专门介绍命令模式的博文中有)中  

      所涉及的角色数量可做出不印证。

   -- 命令模式涉及的角色有:Client, Command Interface, Concrete Command, Invoker以及真正处理请

      求的Receiver;而策略模式只需要:Client, Strategy Interface以及Concrete Strategy.

   -- GoF定义:将一个请求封装为一个对象,从而使你可以用不同的请求对客户进行参数化;对请求排队或

      记录请求日志,以及支持可撤销的操作。

   -- 实现:Client创建一个Command,并为Command绑定一个Receiver。将该Command传给一个Invoker,当

      Invoker被唤醒时,调用Command的Execute方法,而Execute方法则最终调用Receiver的相关方法完成

      请求。当然Client中可以维护一个Command队列,Command中也可以实现一个undo操作。从而实现对操

      作的撤销与重做。

-- 结论:命令模式可以被抽象地视为一种策略模式。但是显然命令模式处理的是更为复杂的情况。或许我们

   可以这么讲:策略模式聚焦的是对相同请求更换解决方案的灵活性;而命令模式聚焦的是对多请求变化的

   封装以及对相同请求不同的请求形式解决方法的可复用性(例如GOFDP中提出的文本编辑器来自不同按钮/菜

   单项的请求实现相同的功能)。

参见:

http://blog.csdn.net/wsh622827/article/details/4759368

http://www.cnblogs.com/devinzhang/archive/2012/01/06/2315235.html

http://blog.sina.com.cn/s/blog_67fdef900101g0z3.html

原文地址:https://www.cnblogs.com/androiddream/p/4757830.html