目录
[显示]

1.摘要

Status模式允许一个对象在其内部状态改变时改变它的行为,换句话说,它把与某个状态相关的行为封装到了具体状态类型中,状态转换只需要修改自身的状态对象即可。

2. 针对问题

假设要开发一个工作流程,流程里包括提交、审批、通过、退回几个步骤,一种设计方案如下:

这样状态语句就混杂在逻辑代码中,如果要新增一个状态的话就要在这里增加一个if-else语句,如果是对流程跳转进行修改,那么要改动的地方会更多。
State模式把状态分支判断放入不同的派生类中,分离了流程管理与业务逻辑。

3. 介绍

允许一个对象在其内部状态改变时改变它的行为。对象看起来似乎修改了它所属的类。

4. 实现

State模式的静态图如下:

其中:
State类型声明了与Context相关的接口。
Context保存State类型实例,并将与状态有关的业务逻辑转发给State对象。
通过指定Context中保存的state对象完成状态转换逻辑,Context或ConcreteState类型都可以决定状态转换逻辑(通过指定Context的status对象)。

Status对象可以使用Flyweight模式。

5. 特点

1、把与某个状态相关的行为封装到了具体状态类型中,状态转换只需要修改自身的状态对象即可。

6. 相关文章

1、设计模式总结

7. 参考文章

  1. 《设计模式_可复用面向对象软件的基础》,