员工请假,请假一天需要组长审批,请假三天需要经理审批,请假七天需要老板审 批,每个角色可以审批的天数不同,当无权限审批时则转给上级领导。请尝试用责任链模式模拟该应用。
时间: 2024-03-01 16:51:50 浏览: 109
员工请假管理流程.doc
好的,根据您的要求,我来设计一个责任链模式来模拟该应用。
首先,我们需要定义一个请假请求类 `LeaveRequest`,用于封装请假请求的信息,包括请假天数、请假人姓名等。
```java
public class LeaveRequest {
private String name; // 请假人姓名
private int days; // 请假天数
public LeaveRequest(String name, int days) {
this.name = name;
this.days = days;
}
public String getName() {
return name;
}
public int getDays() {
return days;
}
}
```
然后,我们定义一个抽象审批者类 `Approver`,包含一个指向下一个审批者的引用 `nextApprover`,以及一个抽象的审批方法 `processRequest()`。
```java
public abstract class Approver {
protected Approver nextApprover;
public void setNextApprover(Approver nextApprover) {
this.nextApprover = nextApprover;
}
public abstract void processRequest(LeaveRequest request);
}
```
接着,我们定义三个具体的审批者类:组长、经理和老板,分别用于处理不同级别的请假请求。
```java
public class GroupLeader extends Approver {
private final int MAX_LEAVES = 1; // 组长最多能批准的天数
@Override
public void processRequest(LeaveRequest request) {
if (request.getDays() <= MAX_LEAVES) {
System.out.println("组长批准 " + request.getName() + " 请假 " + request.getDays() + " 天");
} else {
if (nextApprover != null) {
nextApprover.processRequest(request);
} else {
System.out.println("没有更高级的领导可以审批该请假申请!");
}
}
}
}
public class Manager extends Approver {
private final int MAX_LEAVES = 3; // 经理最多能批准的天数
@Override
public void processRequest(LeaveRequest request) {
if (request.getDays() <= MAX_LEAVES) {
System.out.println("经理批准 " + request.getName() + " 请假 " + request.getDays() + " 天");
} else {
if (nextApprover != null) {
nextApprover.processRequest(request);
} else {
System.out.println("没有更高级的领导可以审批该请假申请!");
}
}
}
}
public class Boss extends Approver {
private final int MAX_LEAVES = 7; // 老板最多能批准的天数
@Override
public void processRequest(LeaveRequest request) {
if (request.getDays() <= MAX_LEAVES) {
System.out.println("老板批准 " + request.getName() + " 请假 " + request.getDays() + " 天");
} else {
System.out.println("没有更高级的领导可以审批该请假申请!");
}
}
}
```
最后,我们可以在客户端代码中创建一个责任链,并将请假请求交给责任链的头部处理。
```java
public class Client {
public static void main(String[] args) {
Approver groupLeader = new GroupLeader();
Approver manager = new Manager();
Approver boss = new Boss();
// 构建责任链
groupLeader.setNextApprover(manager);
manager.setNextApprover(boss);
// 提交请假请求
LeaveRequest request1 = new LeaveRequest("小明", 1);
LeaveRequest request2 = new LeaveRequest("小红", 3);
LeaveRequest request3 = new LeaveRequest("小刚", 5);
LeaveRequest request4 = new LeaveRequest("小李", 10);
groupLeader.processRequest(request1);
groupLeader.processRequest(request2);
groupLeader.processRequest(request3);
groupLeader.processRequest(request4);
}
}
```
输出结果如下:
```
组长批准 小明 请假 1 天
经理批准 小红 请假 3 天
老板批准 小刚 请假 5 天
没有更高级的领导可以审批该请假申请!
```
阅读全文