策略模式 状态模式 比较

策略模式类图

状态模式类图
          
         类图是一样的。但是这两个模式的差别在于它们的意图。
        状态模式中,我们将一些行为封装在状态对象中,context的行为随时可以委托到那些状态对象中的一个。context的内部状态在状态对象集合范围内变化,context的行为也会随着内部状态变化而变化。但是context的客户端对于状态对象的了解不多,甚至完全不了解。
         策略模式,客户端通常要指定context所要组合的策略对象是哪一个,即客户端需要包含必要的逻辑判断。虽然策略模式能够在运行时改变策略,但是对于某个context对象来说,通常只有一个最适当的策略对象。
          一般来说,我们认为策略模式是继承的一种弹性替代方式。如果你用继承定义了一个类的行为,你将被这个行为困住,甚至很难修改它。但是,你可以用策略模式通过组合不同对象的方式来弹性的改变行为。
         通常将状态模式作为context中有大量逻辑判断的替换。通过将行为封装到状态对象中,你可以很容易的通过改变context的状态对象来改变其的行为,

总结:
状态模式,当Context对象被创建后,只需告诉它从什么状态开始,然后状态就会随着context方法的调用而自动改变。而策略模式中,策略的改变需由客户端通过逻辑判断来实现。


          

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值