行为型设计模式-状态模式
来源:互联网 发布:cydia不能安装软件 编辑:程序博客网 时间:2024/06/14 00:57
状态模式:
允许一个对象在其内部状态改变时改变它的行为,对象看起来似乎修改了它的类。
状态模式参与角色:
上下文环境(Context):它定义了客户程序需要的接口并维护一个具体状态角色的实例,
将与状态相关的操作委托给当前的Concrete State对象来处理。抽象状态(State):定义一个接口以封装使用上下文环境的的一个特定状态相关的行为。
具体状态(Concrete State):实现抽象状态定义的接口。
上下文环境:Context
package com.zhiwei.state;public class Context { /** * 上下文内部维护的状态对象,使用接口是为了管理一类的接口可引用的对象实现状态的转移,同时可以了解上下文的状态 */ private State state; /** * 上下文实例化时设置上下文的的出初始状态 */ public Context() { state = new CreatingState(); } /** * 获取上下文当前的状态信息 * @return */ public State getState() { return state; } /** * 状态转移时重新设置新的状态 * @param state */ public void setState(State state) { this.state = state; } public void handle() { //处理状态改变的事件:本质调用具体状态对象的回掉方法,在状态对象内部设置新的状态 state.handle(this); }}
抽象状态:State
public interface State { /** * 处理本状态下的业务逻辑,同时设置上下文流程的下一种状态 * @param document */ void handle(Context context);}
具体状态:列表
package com.zhiwei.state;/** * 公文创建状态对象 * @author Yang ZhiWei * */public class CreatingState implements State { /** * 状态对象实际的业务逻辑处理,处理完成之后 * 设置下一步流程的上下文状态 */ public void handle(Context context) { System.out.println("公文已创建完成......"); context.setState(new CreatedState()); }}
package com.zhiwei.state;public class CreatedState implements State { public void handle(Context context) { System.out.println("公文已发送一级主管......"); context.setState(new SendOneChargeState()); }}
package com.zhiwei.state;public class SendOneChargeState implements State { public void handle(Context context) { //一级主管应该处理代码 System.out.println("公文已发送一级主管......"); context.setState(new SendSuperChargeState()); }}
package com.zhiwei.state;public class SendSuperChargeState implements State { public void handle(Context context) { //二级主管应该处理的代码 context.setState(new ApprovedState()); System.out.println("公文已审批完成......"); }}
package com.zhiwei.state;public class ApprovedState implements State { public void handle(Context context) { //审批完成应该处理代码 System.out.println("公文已结束......"); }}
测试代码:
//初始化上下文对象,并设置初始状态 Context context = new Context(); context.handle(); context.handle(); context.handle(); context.handle(); context.handle();
结果:
通俗解释:
员工A要辞职,A首先填好辞职申请书(上下文对象),整个公司的辞职流程审批链:
组长–》主管–》经理–》人力资源部(状态),只有每个流程都走完才行。
特点:用于处理一个确定的工作流程,如果分层次处理对应的流程的话,可以使用责任链模式(一步到位),这就不需要为每个不同的对象设计不同的工作流程。
扩展:
主流的工作流框架:Activiti/JBPM
0 0
- 设计模式 - 行为型模式 - 状态模式
- 设计模式->行为型模式->状态模式
- 设计模式--行为型--状态模式
- 设计模式22:状态模式【行为型】
- 设计模式-行为型-状态模式(State)
- [设计模式-行为型]状态模式(State)
- 设计模式-行为型之状态模式
- 行为型设计模式-状态模式
- 设计模式-行为-状态
- State 状态(行为型设计模式)
- 设计模式深入学习--State 状态模式(行为型模式)
- Java设计模式之行为型模式(状态模式)
- 设计模式--行为模式--状态模式--Java
- 设计模式 行为模式之状态模式
- 设计模式之行为模式---状态模式
- 设计模式---行为类型---状态
- 行为型模式-状态
- 状态模式(行为型)
- 后台开发程序员常用的linux命令及使用解释,简单查看服务器使用情况
- 23种设计模式汇总整理
- go语言笔记 - 服务端 socket开发相关
- Java笔试面试题整理第八波
- PAT甲级练习1087. All Roads Lead to Rome (30)
- 行为型设计模式-状态模式
- 记使用阻塞队列的坑
- mysql索引的建立和使用
- Monkey log异常分析说明
- Java单例模式
- RNN
- S32 design studio 使用问题汇总
- 标准C++中的string类的用法总结
- 运行时错误:terminate called after throwing an instance of 'std::logic_error'