策略模式和状态模式是双胞胎

首先,我们要2了解2个概念:
状态图
状态转换
**

状态机

  • 找出所有状态
  • 将所有系统中可能发生的动作整合起来

  • 定义一个State接口,这个接口内,每个动作都有一个对应的方法

  • 为每个状态实现状态类,这个类负责状态下的行为
  • 动作委托到状态类

让每一个状态对修改关闭,拥有状态的物体对“扩展开发”


状态模式允许对象在内部状态改变时改变它的行为,对象看起来好像修改了他的类

状态模式适合应用场景

  • 如果对象需要根据自身当前状态进行不同行为, 同时状态的数量非常多且与状态相关的代码会频繁变更的话, 可使用状态模式。
  • 如果某个类需要根据成员变量的当前值改变自身行为, 从而需要使用大量的条件语句时, 可使用该模式。
  • 当相似状态和基于条件的状态机转换中存在许多重复代码时, 可使用状态模式。


状态可被视为策略的扩展。 两者都基于组合机制: 它们都通过将部分工作委派给 “帮手” 对象来改变其在不同情景下的行为。 策略使得这些对象相互之间完全独立, 它们不知道其他对象的存在。 但状态模式没有限制具体状态之间的依赖, 且允许它们自行改变在不同情景下的状态。