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

简介: 该博客文章通过一个OA系统中的请假审批模块示例,使用Java语言实现了职责链模式,展示了如何根据不同的请假天数由不同级别的领导进行审批,并讨论了职责链模式的优缺点。

某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、对于较长的请求、每个处理对象可能都会处理一部分。对系统的性能造成一定的影响。

相关文章
|
2月前
|
消息中间件 SQL 前端开发
如何开发人事及OA管理系统的考勤管理板块?(附架构图+流程图+代码参考)
考勤系统是企业HR管理的核心模块,涉及打卡、请假、加班、补卡等多项功能,支持多场景打卡方式,并与薪酬、绩效紧密关联。系统需具备数据自动统计、异常提醒、审批流程集成等功能,有效减少人工错误,提升管理效率。
|
2月前
|
存储 缓存 数据库
如何开发人事及OA管理系统的全局基础设置板块?(附架构图+流程图+代码参考)
在企业数字化转型中,人事管理系统(HRM)与办公自动化系统(OA)已成为核心工具。本文详解全局基础设置的三大核心模块:部门岗位基础表、工作日历和工作地点基础表,涵盖功能设计、业务流程、开发技巧与代码示例,助力企业优化系统架构,提升管理效率与扩展性。
|
2月前
|
存储 Java 数据库
如何开发人事及OA管理系统的会议管理板块?(附架构图+流程图+代码参考)
人事及OA系统是现代企业管理的重要工具,整合人力资源与办公流程,提升效率。其会议管理板块可优化会议室预约、冲突检测、审批流程及数据统计,助力企业高效协作。本文详解功能设计、开发技巧与实现方案。
|
2月前
|
JavaScript 安全 前端开发
如何开发人事及OA管理系统的薪酬管理板块?(附架构图+流程图+代码参考)
本文介绍了如何构建一个高效、合规的企业薪酬管理系统,涵盖薪酬模块的重要性、核心功能、系统架构设计、数据模型、开发实现及安全合规要点。内容包括薪酬配置、数据导入、自动化计算、审批发放、工资条生成与安全分发、报表看板、权限审计等关键环节,并提供详细的业务流程、架构图、核心代码示例及落地开发技巧。适用于HR、财务及技术人员快速搭建薪酬管理系统,提升发薪效率,降低人工错误与合规风险。
|
2月前
|
前端开发 BI API
如何开发人事及OA管理系统的入转调离板块?(附架构图+流程图+代码参考)
企业人事及OA系统核心模块“入转调离”(入职、转正、调动、离职)涵盖员工全生命周期管理,涉及审批流、合同管理、岗位变更、社保薪资联动等关键流程。通过系统化设计,实现数据统一、流程可审计、信息可追溯,提升HR效率并增强企业合规性。本文详解模块架构、设计原则、五大子模块实现方案及常见集成点,助力企业搭建高效、可靠的人事管理系统。
|
2月前
|
存储 消息中间件 数据库
如何开发人事及OA管理系统的其他SSC板块?(附架构图+流程图+代码参考)
本文介绍了人事及OA管理系统中“其他SSC板块”的开发与实现,涵盖公告发文、公司资质文件管理、名片印制申请、用印申请、开具证明申请等功能模块。内容包括各模块的功能需求、业务流程、开发技巧及代码参考,帮助企业提升行政管理效率,优化信息流通,增强信息安全。适合企业管理人员及系统开发人员阅读参考。
|
2月前
|
JSON 前端开发 NoSQL
如何开发OA管理系统的日报、周报管理板块?(附架构图+流程图+代码参考)
本文详解如何将日报/周报模块深度集成至人事OA系统,涵盖需求分析、系统架构、数据模型、业务流程、开发技巧及运维部署等全流程方案。重点阐述结构化数据采集、自动化提醒、审批闭环设计等核心功能,并提供关键代码示例,助力企业高效落地日报/周报系统,提升组织协同效率。
|
2月前
|
前端开发 JavaScript 算法
如何开发人事及OA管理系统的绩效管理板块?(附架构图+流程图+代码参考)
本文深入解析了人事及OA系统中绩效管理模块的设计与实现,涵盖总体架构、功能模块、业务流程、开发技巧、数据库设计、前后端实现及核心算法等。内容详实,配有架构图、流程图和代码示例,适合HR系统开发者与管理者参考,助力构建高效、可扩展的绩效管理体系。
|
2月前
|
SQL 消息中间件 JavaScript
如何开发人事及OA管理系统的招聘管理板块?(附架构图+流程图+代码参考)
本文介绍了如何构建一个高效、闭环的招聘管理系统,涵盖从需求发布、简历筛选、面试安排到Offer发放的全流程。文章提出了“标准化→自动化→数据化”的三步走策略,并提供了系统架构图、核心数据库设计、前后端开发示例及实用开发技巧,助力企业实现招聘流程的数字化升级。