状态和策略模式在某种意义上是相似的,它们都将行为封装在单独的对象中,并使用组合来委托组合对象来实现行为,并且它们都提供了通过更改组合对象来动态更改行为的灵活性.运行.但是有一些关键的区别:
在状态模式中,客户端对状态对象一无所知.状态变化对客户端透明地发生.客户端只调用上下文中的方法,上下文监视其自身的状态.因为客户端不知道状态更改,所以客户端看起来好像每次由于状态更改而导致行为发生更改时从不同的类实例化上下文.该对象似乎将其类更改为模式状态的官方定义.该模式围绕明确定义的一系列状态转换构建.改变状态是模式存在的关键.
即使策略模式通过动态更改组合策略对象提供了更改行为的灵活性,但大多数情况下已经为每个上下文设置了适当的策略对象.即使模式提供了一种动态改变组合策略对象的方法,也不需要它.即使必须这样做,也是客户做出改变.客户端将在上下文中调用setter方法并传递新的策略对象.因此,行为更改对客户端不透明,并由客户端启动和控制.该模式不会鼓励一系列明确定义的行为更改,例如状态模式.客户端知道策略对象,并且通常在创建它时在上下文中设置适当的策略对象.客户端控制上下文使用的策略对象,但在状态模式中,客户端对上下文使用的状态对象一无所知.
有关其他信息,请参阅以下链接http://myrandomsparks.blogspot.in/2012/05/strategy-vs-state-pattern.html
| 归档时间: |
|
| 查看次数: |
4563 次 |
| 最近记录: |