状态模式实例请假流程

简介: 状态模式实例请假流程

工作流中的请假流程
某人提出请假申请,先由项目经理审批,如果项目经理不同意,审批就直接结束
如项目经理同意,再看是否超过3天,如果三天以内,审批直接结束
否则,交给部门经理,部门经理审核后,无论是否同意,审批直接结束

在这里插入图片描述
状态类

package 状态模式;

public abstract class State {
    public abstract void shenPi(Work w);
}

项目经理类,继承了状态类,并实现了状态由项目经理审批转移至部门经理审批:

package 状态模式;

public class ProjectManager extends State {
    @Override
    public void shenPi(Work w) {
        if(w.isManagermentAccept()==false){
            System.out.println("项目经理不同意,审批结束!");
        }else{
            if(w.getDay()<=3){
                System.out.println("请假时间在三天以内,项目经理同意,审批结束");
            }else{
                System.out.println("请假时间大于三天,移交给部门经理处理!");
                w.setCurrent(new PartmentMeneger());
                w.shenPi();
            }
        }
    }
}

部门经理类:

package 状态模式;

public class PartmentMeneger extends State {
    @Override
    public void shenPi(Work w) {
        System.out.println("已经过部门经理审批,审批结束!");
    }
}

工作类,拥有一个State的对象,在shenPi方法中将自己回传给State:

package 状态模式;

public class Work {
    private State current;
    private int day;
    private boolean isManagermentAccept;
    public Work() {
        current = new ProjectManager();
    }
    public State getCurrent() {
        return current;
    }
    public void setCurrent(State current) {
        this.current = current;
    }
    public int getDay() {
        return day;
    }
    public void setDay(int day) {
        this.day = day;
    }
    public boolean isManagermentAccept() {
        return isManagermentAccept;
    }
    public void setManagermentAccept(boolean isManagermentAccept) {
        this.isManagermentAccept = isManagermentAccept;
    }
    public void shenPi(){
        current.shenPi(this);
    }
}

客户端测试一下:

package 状态模式;

public class Test {
    public static void main(String [] args){
        Work w = new Work();
        w.setDay(4);
        w.setManagermentAccept(true);
        w.shenPi();
    }
}
目录
相关文章
|
3月前
|
监控 API 数据安全/隐私保护
淘宝京东价格监控API接口:构建智能价格生态的基石
淘宝和京东的价格监控API接口为品牌方、商家及第三方服务商提供了强大的数据支持,以下从接口功能、调用方式、应用场景等方面进行详细介绍
|
5月前
|
存储 弹性计算 测试技术
10分钟私有部署QwQ-32B模型,像购买Ecs实例一样快捷
虽然阿里云提供了基于 IaaS 部署 QwQ-32B 模型的方式,但传统的基于IaaS的部署方式需要用户自行配置环境、安装依赖、优化硬件资源,并解决复杂的网络与存储问题,整个流程不仅耗时耗力,还容易因操作失误导致各种不可预见的问题。 因此,阿里云计算巢提供了基于ECS镜像与VLLM的大模型一键部署方案,通过ECS镜像打包标准环境,通过Ros模版实现云资源与大模型的一键部署,用户无需关心模型部署运行的标准环境与底层云资源编排,10分钟即可部署使用QwQ-32B模型,15分钟即可部署使用Deepseek-R1-70B模型。
|
6月前
|
SQL 关系型数据库 MySQL
MySQL:CTE 通用表达式
CTE(通用表表达式)为处理复杂查询提供了强大的工具。通过普通CTE,可以简化查询逻辑,提高可读性;通过递归CTE,可以优雅地处理层级结构数据。掌握CTE的使用,对于提升SQL查询能力和优化数据库操作有着重要意义。希望本文能帮助你更好地理解和使用MySQL中的CTE,提高工作效率和代码质量。
243 7
|
11月前
|
缓存 JavaScript 前端开发
vue2进阶篇:安装路由
vue2进阶篇:安装路由
178 2
|
前端开发 JavaScript 定位技术
HTML中target的使用注意点
`target` 属性在 HTML 中主要用于 `&lt;a&gt;` 和 `&lt;form&gt;` 元素,指定链接打开或表单提交的位置。常见值包括 `_self`(当前窗口)、`_blank`(新窗口)、`_parent`(父框架)和 `_top`(整个窗口)。使用 `target=&quot;_blank&quot;` 时应加 `rel=&quot;noopener noreferrer&quot;` 以提高安全性。JavaScript 可动态设置 `target`,CSS 可增强样式。尽管 `target` 主要用于链接和表单,但在特定场景下也可应用于其他元素。
|
消息中间件 存储 Kafka
Kafka最基础使用
Kafka最基础使用
293 0
|
SQL 数据挖掘 关系型数据库
|
物联网 测试技术 数据安全/隐私保护
|
城市大脑 人工智能 监控
城市大脑 | 智慧应急综合解决方案
本文介绍了城市大脑 | 智慧应急综合解决方案的方案概述,方案价值及优势以及最佳实践。
城市大脑 | 智慧应急综合解决方案
阿萨学工具: Apifox 的智能Mock功能
阿萨学工具: Apifox 的智能Mock功能
265 0