用State模式的JAVA重构例子

State模式

State模式用于解决系统中复杂对象的状态转换以及不同状态下行为的封装问题。它的定义如下:

状态模式(State Pattern):允许一个对象在其内部状态改变时改变它的行为,对象看起来似乎修改了它的类。其别名为状态对象(Objects for States),状态模式是一种对象行为型模式。

State Pattern


实例

它常应用于业务逻辑中有大量与对象状态有关的条件语句。如本例中的授权流程过程,它的流程如下:

用户授权流程

视频实例的源码和每一步的commit可以参考这个分支的记录

优缺点

  • 主要优点

    1. 封装了转换规则
    2. SRP, 可以让每个状态类专注于处理自己的转换逻辑
  • 主要缺点

    1. 状态模式的使用必然会增加系统类和对象的个数
    2. 由于每个状态的逻辑都分散到类中,不易于对整体流程的逻辑理
    3. 状态模式对”开闭原则”的支持并不太好,如果要新建一个状态的话,有可能需要修改分散在各个状态类中的逻辑。
0%