策略模式 状态模式 比较

策略模式&状态模式
策略模式类图

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

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


          





posted @ 2013-11-26 13:24  tanhaiyuan  阅读(256)  评论(0编辑  收藏  举报