设计模式:State
目录
[显示]
1.摘要
Status模式允许一个对象在其内部状态改变时改变它的行为,换句话说,它把与某个状态相关的行为封装到了具体状态类型中,状态转换只需要修改自身的状态对象即可。
2. 针对问题
假设要开发一个工作流程,流程里包括提交、审批、通过、退回几个步骤,一种设计方案如下:
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 |
public class Flow { //...other fields int state; } public class FlowController { public void handleRequest(Flow flow){ if(flow.getState()==0) { //do something } else if(flow.getState()==1) { //do something } } } |
这样状态语句就混杂在逻辑代码中,如果要新增一个状态的话就要在这里增加一个if-else语句,如果是对流程跳转进行修改,那么要改动的地方会更多。
State模式把状态分支判断放入不同的派生类中,分离了流程管理与业务逻辑。
3. 介绍
允许一个对象在其内部状态改变时改变它的行为。对象看起来似乎修改了它所属的类。
4. 实现
State模式的静态图如下:
其中:
State类型声明了与Context相关的接口。
Context保存State类型实例,并将与状态有关的业务逻辑转发给State对象。
通过指定Context中保存的state对象完成状态转换逻辑,Context或ConcreteState类型都可以决定状态转换逻辑(通过指定Context的status对象)。
Status对象可以使用Flyweight模式。
5. 特点
1、把与某个状态相关的行为封装到了具体状态类型中,状态转换只需要修改自身的状态对象即可。
6. 相关文章
1、设计模式总结
7. 参考文章
- 《设计模式_可复用面向对象软件的基础》,
本作品采用知识共享署名-非商业性使用 4.0 国际许可协议进行许可,转载请注明作者及原网址。
抱歉,暂停评论。