某OA系统需要提供一个假条审批的模块,如果员工请假天数小于3天,主任可以审批该请假条;如果员工请假天数大于等于3天,小于10天,经理可以审批;如果员工请假天数大于等于10天,小于30天,总经理可以审批;如果超过30天,总经理也不能审批,提示相应的拒绝信息。

要求绘制相应的类图并使用Java语言编程模拟实现。

UML类图

package com.zheng;

public abstract class Approver {
protected Approver successor;//定义后继对象
protected String name;//审批者姓名
public Approver(String name) {
this.name=name;
} //设置后继审批者
public void setSuccessor(Approver successor) {
this.successor=successor;
}
//抽象请求处理方法
public abstract void processRequest(PurchaseRequest request); }
package com.zheng;

public class PurchaseRequest {
private int time; //请假时间
public PurchaseRequest(int time) {
this.time=time;
} public int getTime() {
return time;
} public void setTime(int time) {
this.time = time;
} }
package com.zheng;

public class Director extends Approver {
public Director(String name) {
super(name);
}
//具体请求处理方法
@Override
public void processRequest(PurchaseRequest request) {
if(request.getTime()<3) {
System.out.println("主任"+this.name+"批准请假:"+request.getTime());
System.out.println("请假成功"); }else {
this.successor.processRequest(request);//转发请求
} } }
package com.zheng;

public class VicePresident extends Approver {
public VicePresident(String name) {
super(name);
}
//具体请求处理方法
@Override
public void processRequest(PurchaseRequest request) {
if(request.getTime()<10) {
System.out.println("经理"+this.name+"批准请假:"+request.getTime());
System.out.println("请假成功");
}else {
this.successor.processRequest(request);//转发请求
} } }
package com.zheng;

public class President extends Approver {
public President(String name) {
super(name);
}
//具体请求处理方法
@Override
public void processRequest(PurchaseRequest request) {
if(request.getTime()<30) {
System.out.println("总经理"+this.name+"批准请假:"+request.getTime());
System.out.println("请假成功");
}else {
System.out.println("对不起,请假时间太长。总经理无权批假。");
} } }
package com.zheng;

import java.util.Scanner;

public class Client {

	public static void main(String[] args) {
// TODO 自动生成的方法存根
//职责中的关系对象
Approver w1,w2,w3;
w1=new Director("小红1");
w2=new VicePresident("小红2");
w3=new President("小红3");
//创建职责链
w1.setSuccessor(w2);
w2.setSuccessor(w3);
while(true) {
Scanner scan=new Scanner(System.in);
System.out.println("请输入请假天数:");
int time=scan.nextInt();
PurchaseRequest pr1=new PurchaseRequest(time);
w1.processRequest(pr1);
}
}
}

运行截图

职责链模式优点:1、降低了系统的耦合性。2、简化了对象之间的相互连接。3、可以灵活的增加对请求处理的职责。4、符合开闭原则
职责链模式缺点:1、一个请求没有具体的接受者,客户发出的请求可能得不到解决。2、建链不当,可能会造成系统陷入死循环。3、对于较长的请求、每个处理对象可能都会处理一部分。对系统的性能造成一定的影响。

某OA系统需要提供一个假条审批的模块,如果员工请假天数小于3天,主任可以审批该请假条;如果员工请假天数大于等于3天,小于10天,经理可以审批;如果员工请假天数大于等于10天,小于30天,总经理可以审批的更多相关文章

  1. 资深CIO介绍如何选型OA系统的?

    OA办公系统成为企业管理的标配软件,在于可有效加强组织管理能力,提高员工协同效率,助力企业科学决策,合理分配企业资源,提升企业综合实力与市场竞争力.企业OA选型的经验总结来说也就是品牌.技术.产品.服 ...

  2. SpringBoot+Activiti+bpmn.js+Vue.js+Elementui(OA系统审批流)

    引言:OA系统用到请假.加班.调休.离职,需要使用工作流进行流程审批 一:activiti流程设计器的选择(通过学习activiti工作流过程中,发现一款好的流程设计器将会更好的方便的设计好流程(主要 ...

  3. 整合了一个功能强大完善的OA系统源码,php全开源 界面漂亮美观

    整合了一个功能强大完善的OA系统源码,php全开源界面漂亮美观.需要的同学联系Q:930948049

  4. OA办公系统,一个沉淀企业文化的容器

    资源是会枯竭的,唯有文化才会生生不息.一切工业产品都是人类智慧创造的.随着公司规模的扩大,企业中两大根本"人和规则"面临诸多挑战,OA办公系统是一个全员使用的办公软件产品,员工可通 ...

  5. 浅谈OA系统与Portal门户的区别

    随着社会信息化的发展与进步,OA办公自动化软件打破了传统复杂的办公方式,使各个行业实现了高效的无纸化办公.由此一来OA快速成长为继财务软件.ERP软件之后的第三大管理软件.随着企业信息化系统的不断增多 ...

  6. OA系统权限管理设计(转载)

    不论什么系统都离不开权限的管理,有一个好的权限管理模块,不仅使我们的系统操作自如,管理方便,也为系统加入亮点. l         不同职责的人员,对于系统操作的权限应该是不同的.优秀的业务系统,这是 ...

  7. OA系统在实际应用中可发挥出的协同应用价值

    OA软件引进国内已有二十多年,早期的OA软件更多地是扮演一个"文秘"的角色,只进行一些基本的行政事务处理,创造的价值不大.但随着OA软件理论和技术的日趋成熟,OA软件摆脱了原有的局 ...

  8. 移动办公OA系统

    好久没有更新文章了,总觉得心里空空的,最近由于工作的原因,没有来的及及时更新,总感觉应该把学习到的东西做个记录,供大家学习,也供自己复习,温故而知新.今天趁着周末休息时间,把自己最近在公司的做的项目做 ...

  9. OA系统权限管理设计方案【转】

    l 不同职责的人员,对于系统操作的权限应该是不同的.优秀的业务系统,这是最基本的功能. l 可以对“组”进行权限分配.对于一个大企业的业务系统来说,如果要求管理员为其下员工逐一分配系统操作权限的话,是 ...

随机推荐

  1. Java 将Excel转为XML

    可扩展标记语言(XML)文件是一种标准的文本文件,它使用特定的标记来描述文档的结构以及其他特性.通常,我们可以通过格式转换的方式来得到XML格式的文件.本文,将通过Java代码介绍如何实现由Excel ...

  2. devops-4:Jenkins基于k8s cloud和docker cloud动态增减节点

    Jenkins管理动态节点 上文介绍Jenkins增加静态agent的步骤,除了静态增加外,还有动态管理的功能,两者最大的差异在于动态可以在有job运行时,临时加入一个agent到jenkins ma ...

  3. React报错之Expected an assignment or function call and instead saw an expression

    正文从这开始~ 总览 当我们忘记从函数中返回值时,会产生"Expected an assignment or function call and instead saw an express ...

  4. Canvas 非常重要的三个函数

    beginPath 绘制路径必须添加 beginPath().它标志着一个画笔在画布中哪个地方开始画起.没有它,新起的画笔位置必定与上一次画笔结束的位置相连. // 第一个半圆 ctx.arc(60, ...

  5. java基础———注释

    注释是写给读者看的,并不会被执行! 单行注释 以 //开头 例如://注释内容              可以注释一行文本 多行注释 以/*开头     以 */结束 例如:/*注释内容*/      ...

  6. Java第一篇:为什么是接口?

    好家伙, 写了一道Java作业:    一道简单的接口练习题   而答案也比较简单 public class Demo1 { public static void main(String[] args ...

  7. 第四章 部署K8s前准备工作

    一.主机准备 1.硬件 准备5台2C/2g/50g虚拟机: Centos7.6系统 2.集群规划 使用10.4.7.0/24网络 IP 主机名 10.4.7.11 hdss7-11.host.com ...

  8. KingbaseES 数据库参数优化

    一.数据库应用类型 针对不同的应用模型,需要对数据库配置进行优化: 1.网络应用程序(WEB) ​通常受 CPU 限制 DB比RAM小得多 90% 或更多的简单查询 2.在线事务处理 (OLTP) ​ ...

  9. redis的简单学习记录

    安装 1 brew install redis 启动redis服务 1 redis-server & 启动命令 1 redis-cli -h 127.0.0.1 -p 6379 利用gored ...

  10. 03-MyBatisPlus的CRUD 接口

    一.insert 1.插入操作 @RunWith(SpringRunner.class) @SpringBootTest public class CRUDTests { @Autowired pri ...