状态模式State Pattern

定义

状态模式(State Pattern)也称为状态机模式(State Machine Pattern),是允许对象在内部状态发生改变时改变它的行为,对象看起来好像修改了它的类。
属于行为型模式。

适用场景

  1. 行为随状态改变而改变的场景。
  2. 一个操作中含有庞大的多分支结构,并且这些分支取决于对象的状态。

举例

  1. JSF Lifecycle类似于Context
  2. 源码中应用较少,需要结合实际业务

优点

  1. 结构清晰:将状态独立为类,消除了冗余的if...else或switch...case语句,使代码更加简洁,提高系统可维护性。
  2. 将状态转换显示化:通常的对象内部都是使用数值类型来定义状态,状态的切换是通过赋值进行表现,不够直观;而使用状态类,在切换状态时,是以不同的类进行表示,转换目的更加明确。
  3. 状态类职责明确且具备扩展性。

缺点

  1. 类膨胀:如果一个事物具备很多状态,则会造成状态类太多。
  2. 状态模式的结构与实现都较为复杂,如果使用不当将导致程序结构和代码的混乱。
  3. 状态模式对开闭原则的支持并不太好,对于可以切换状态的状态模式,增加新的状态类需要修改那些负责状态转换的源代码,否则无法切换到新增状态,而且修改某个状态类的行为也需修改对应类的源代码。

状态模式相关的设计模式

状态模式与责任链模式

  1. 状态模式强调内部状态的改变。责任链模式强调外部
  2. 状态模式知道下一个节点能够执行。责任链模式不知道下一个节点能否执行。
  3. 状态模式有逻辑性,无先后。责任链有顺序,有先后

状态模式与策略模式

  1. 状态模式状态之间有关联,用户不能主动设置除初始状态外的状态。
  2. 策略模式可以让用户选择

你可能感兴趣的:(状态模式State Pattern)