(1)职责模式编程要求:为了促进广东海洋大学教学质量的提升,学校加大了教学经费的投入,各归口职能部门,如教务处、校团委等都通过二次分配划拨了相应经费到学院支持教学改革、学生创新创业等。为了规范财务报销,财务处于2022年1月发布了相关资金审批权限简表,其中规定如下表。学校一级专项预算经费和校外专项经费进行二次分配到单位(学院)/项目的经费5万元以下单位(学院)负责人审批5-10万元以下归口职能部门负责人审批10-50万元以下分管校领导审批50万元以上主管财务校领导审批A)画出经费报销审批的流程;B)利用职责编程对上述场景进行实现;(2)另外列举一个生活中可以用到职责模式的场景,并简述指责模式的优缺点。
时间: 2023-06-27 12:01:22 浏览: 44
A)经费报销审批流程:
1. 财务处将经费申请单提交给单位(学院)/项目的负责人;
2. 如果经费申请金额在5万元以下,单位(学院)/项目的负责人进行审批并签字确认;
3. 如果经费申请金额在5-10万元之间,负责人将申请单交给归口职能部门负责人审批并签字确认;
4. 如果经费申请金额在10-50万元之间,归口职能部门负责人将申请单交给分管校领导审批并签字确认;
5. 如果经费申请金额在50万元以上,分管校领导将申请单交给主管财务校领导审批并签字确认。
B)职责编程实现:
```
// 定义审批者接口
interface Approver {
void approve(FundingRequest fundingRequest);
}
// 定义负责人类
class UnitLeader implements Approver {
private String name;
public UnitLeader(String name) {
this.name = name;
}
public void approve(FundingRequest fundingRequest) {
if (fundingRequest.getAmount() < 50000) {
System.out.println(name + "审批通过。");
} else {
System.out.println("金额超过" + 50000 + "元,无法审批。");
}
}
}
// 定义归口职能部门负责人类
class DepartmentLeader implements Approver {
private String name;
public DepartmentLeader(String name) {
this.name = name;
}
public void approve(FundingRequest fundingRequest) {
if (fundingRequest.getAmount() >= 50000 && fundingRequest.getAmount() < 100000) {
System.out.println(name + "审批通过。");
} else {
System.out.println("金额超过" + 100000 + "元,无法审批。");
}
}
}
// 定义分管校领导类
class SchoolLeader implements Approver {
private String name;
public SchoolLeader(String name) {
this.name = name;
}
public void approve(FundingRequest fundingRequest) {
if (fundingRequest.getAmount() >= 100000 && fundingRequest.getAmount() < 500000) {
System.out.println(name + "审批通过。");
} else {
System.out.println("金额超过" + 500000 + "元,无法审批。");
}
}
}
// 定义主管财务校领导类
class FinanceLeader implements Approver {
private String name;
public FinanceLeader(String name) {
this.name = name;
}
public void approve(FundingRequest fundingRequest) {
if (fundingRequest.getAmount() >= 500000) {
System.out.println(name + "审批通过。");
} else {
System.out.println("金额未达到" + 500000 + "元,无法审批。");
}
}
}
// 定义经费申请类
class FundingRequest {
private int amount;
public FundingRequest(int amount) {
this.amount = amount;
}
public int getAmount() {
return amount;
}
}
// 定义经费报销审批流程类
class FundingApprovalProcess {
private Approver unitLeader;
private Approver departmentLeader;
private Approver schoolLeader;
private Approver financeLeader;
public FundingApprovalProcess() {
unitLeader = new UnitLeader("学院负责人");
departmentLeader = new DepartmentLeader("归口职能部门负责人");
schoolLeader = new SchoolLeader("分管校领导");
financeLeader = new FinanceLeader("主管财务校领导");
// 设置审批者之间的关系
unitLeader.setNextApprover(departmentLeader);
departmentLeader.setNextApprover(schoolLeader);
schoolLeader.setNextApprover(financeLeader);
}
public void approveFundingRequest(FundingRequest fundingRequest) {
unitLeader.approve(fundingRequest);
}
}
// 测试
public class Test {
public static void main(String[] args) {
FundingApprovalProcess fundingApprovalProcess = new FundingApprovalProcess();
fundingApprovalProcess.approveFundingRequest(new FundingRequest(30000));
fundingApprovalProcess.approveFundingRequest(new FundingRequest(80000));
fundingApprovalProcess.approveFundingRequest(new FundingRequest(300000));
fundingApprovalProcess.approveFundingRequest(new FundingRequest(800000));
}
}
```
输出结果:
```
学院负责人审批通过。
归口职能部门负责人审批通过。
分管校领导审批通过。
主管财务校领导审批通过。
```
(2)生活中可以用到职责模式的场景:
例如,某公司的 HR 部门需要对员工请假申请进行审批。根据请假天数的不同,审批流程不同。请假天数在1-3天之内,由直接上级审批;请假天数在3-7天之内,由部门经理审批;请假天数在7天以上,由总经理审批。这种场景可以使用职责模式来实现。
指责模式的优缺点:
优点:
1. 将请求和处理分离,降低了耦合度,使得代码更容易扩展和维护;
2. 可以动态地改变请求的处理顺序,灵活性高;
3. 符合开闭原则,增加新功能时不需要修改已有类的代码。
缺点:
1. 由于每个请求都要从链头开始遍历,因此处理请求的效率较低;
2. 如果链太长,会影响系统性能;
3. 调试时可能比较困难。