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

-- 相同点:
   -- 毫无疑问,第一个相同点肯定是:封装变化。策略模式封装算法的变法,命令模式封装请求的变化。
   -- 都使用组合来实现功能,达到解耦的目的。
   -- 如果我们将命令模式做更高层次上的抽象,可以将它看成是一种策略模式。如:我们将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中提出的文本编辑器来自不同按钮/菜
   单项的请求实现相同的功能)。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值