实验内容(1)职责模式编程要求:为了促进广东海洋大学教学质量的提升,学校加大了教学经费的投入,各归口职能部门,如教务处、校团委等都通过二次分配划拨了相应经费到学院支持教学改革、学生创新创业等。为了规范财务报销,财务处于2022年1月发布了相关资金审批权限简表,其中规定如下表。学校一级专项预算经费和校外专项经费进行二次分配到单位(学院)/项目的经费5万元以下单位(学院)负责人审批5-10万元以下归口职能部门负责人审批10-50万元以下分管校领导审批50万元以上主管财务校领导审批,利用职责编程对上述场景进行实现;(2)另外列举一个生活中可以用到职责模式的场景,并简述指责模式的优缺点。
时间: 2023-06-24 21:09:15 浏览: 51
(1)职责模式编程实现:
首先,我们需要定义一个抽象类或者接口来表示审批人,该类或接口中至少包含一个审批方法。然后,我们定义具体的审批人类,它们实现了审批方法并根据自己的权限进行审批,如果权限不足则将请求传递给下一个审批人。最后,我们定义一个请求类,包含请求的金额和请求的类型,在客户端中创建请求实例并将其传递给第一个审批人,第一个审批人根据自己的权限进行审批,如果权限不够则将请求传递给下一个审批人,以此类推,直到请求被完全处理。
以下是一个简单的示例代码:
```java
// 抽象审批人类
abstract class Approver {
protected Approver nextApprover; // 下一个审批人
public void setNextApprover(Approver nextApprover) {
this.nextApprover = nextApprover;
}
public abstract void approve(Request request);
}
// 负责人审批类
class LeaderApprover extends Approver {
@Override
public void approve(Request request) {
if (request.getAmount() < 50000) {
System.out.println("负责人审批通过,金额:" + request.getAmount());
} else {
if (nextApprover != null) {
nextApprover.approve(request);
}
}
}
}
// 归口职能部门负责人审批类
class FunctionApprover extends Approver {
@Override
public void approve(Request request) {
if (request.getAmount() >= 50000 && request.getAmount() < 100000) {
System.out.println("归口职能部门负责人审批通过,金额:" + request.getAmount());
} else {
if (nextApprover != null) {
nextApprover.approve(request);
}
}
}
}
// 分管校领导审批类
class LeaderApprover2 extends Approver {
@Override
public void approve(Request request) {
if (request.getAmount() >= 100000 && request.getAmount() < 500000) {
System.out.println("分管校领导审批通过,金额:" + request.getAmount());
} else {
if (nextApprover != null) {
nextApprover.approve(request);
}
}
}
}
// 主管财务校领导审批类
class LeaderApprover3 extends Approver {
@Override
public void approve(Request request) {
if (request.getAmount() >= 500000) {
System.out.println("主管财务校领导审批通过,金额:" + request.getAmount());
} else {
if (nextApprover != null) {
nextApprover.approve(request);
}
}
}
}
// 请求类
class Request {
private int amount;
private String type;
public Request(int amount, String type) {
this.amount = amount;
this.type = type;
}
public int getAmount() {
return amount;
}
public String getType() {
return type;
}
}
// 客户端代码
public class Main {
public static void main(String[] args) {
Approver leader = new LeaderApprover();
Approver function = new FunctionApprover();
Approver leader2 = new LeaderApprover2();
Approver leader3 = new LeaderApprover3();
leader.setNextApprover(function);
function.setNextApprover(leader2);
leader2.setNextApprover(leader3);
Request request1 = new Request(30000, "学院经费");
Request request2 = new Request(80000, "学院经费");
Request request3 = new Request(150000, "学院经费");
Request request4 = new Request(700000, "学院经费");
leader.approve(request1);
leader.approve(request2);
leader.approve(request3);
leader.approve(request4);
}
}
```
(2)生活中可以用到职责模式的场景:
在公司中,如果员工需要申请一些费用报销,通常需要经过多个领导的审批,例如直接主管、部门负责人、财务主管等。这种情况下,我们可以使用职责模式来实现审批流程,使得每个领导只需要关注自己的审批权限,大大简化了审批流程,并且使得整个流程更加规范和可控。
职责模式的优点是可以使得请求的发送者和接收者解耦,请求发送者不需要知道请求的处理细节,只需要将请求发送给第一个处理者即可,处理者之间也是松耦合的关系,可以方便地进行组合和扩展。职责模式的缺点是可能会导致请求被多次处理,如果处理者之间没有合理地进行协调,容易出现请求处理的重复和遗漏。