博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
【行为型】- 状态模式
阅读量:7210 次
发布时间:2019-06-29

本文共 2545 字,大约阅读时间需要 8 分钟。

hot3.png

状态模式

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

角色

  • 上下文环境(Context):它定义了客户程序需要的接口并维护一个具体状态角色的实例,将与状态相关的操作委托给当前的Concrete State对象来处理

  • 抽象状态(State):定义1个接口以封装使用上下文环境的的1个特定状态相关的行为

  • 具体状态(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

转载于:https://my.oschina.net/yangzhiwei256/blog/3013882

你可能感兴趣的文章
我来阅读lodash源码——Math(一)
查看>>
Laravel 5.5 使用 Passport 实现 Auth 认证
查看>>
用python写通用restful api service(一)
查看>>
javascript this指针详解
查看>>
Hystrix:HystrixCollapser请求合并
查看>>
three.js 入门详解(一)
查看>>
Android基础之Java接口
查看>>
Angular开发实践(一):环境准备及框架搭建
查看>>
Vue2 源码漫游(二)
查看>>
微信浏览器下拉黑边的终极解决方案---wScroollFix
查看>>
我是如何学会爱上 Vim 的
查看>>
小tips:JS中typeof与instanceof用法
查看>>
阿里云Ecs挂载云盘
查看>>
《Kotlin项目实战开发》第1章 Kotlin是什么
查看>>
基于 react, redux 最佳实践构建的 2048
查看>>
云栖大会看技术人成长之路
查看>>
从零搭建React全家桶框架教程
查看>>
Windows command tools
查看>>
Webpack 最佳实践总结(一)
查看>>
【138天】尚学堂高淇Java300集视频精华笔记(84)
查看>>