首页/开发/代码质量与评审速查/状态模式 State(行为型)
设计原则与模式62 条

状态模式 State(行为型)

对象行为随内部状态改变:把每个状态封装为类,状态迁移显式化;相比状态字段 + switch,状态类让「迁移表」可读、单状态逻辑可测。

意图行为随状态变化、迁移显式
对比枚举+switch:分支散落、迁移难追
迁移状态对象返回下一个状态

形态示意

形态示意
class Order {
    private OrderState state = new DraftState();
    void pay() { state = state.pay(this); }
    void ship() { state = state.ship(this); }
}

易错点

  • 状态类里直接 new 目标状态:类之间强耦合,迁移图难维护
  • 并发使用同一状态实例:状态对象应尽量无实例状态

数据来源与参考

  • 《设计模式》(GoF)· State
​‌‌​​‌​​​‌‌​‌‌‌‌​‌‌​​​‌‌​‌‌‌​​‌‌​​‌​‌‌‌​​‌‌‌​​​‌​‌‌​‌​​‌​‌‌‌​​​‌​‌‌​‌​​‌​‌‌​​​‌‌​‌‌‌​‌​​​‌‌​‌‌‌‌​​‌​‌‌‌​​‌‌​​​‌‌​‌‌​‌‌‌‌​‌‌​‌‌​‌