java责任链模式设计一套流程系统
时间: 2024-01-08 21:03:21 浏览: 71
java责任链模式
3星 · 编辑精心推荐
假设我们需要设计一个请假审批系统,系统中有多个级别的审批人,包括组长、经理、总经理等,每个级别的审批人可以处理不同级别的请假申请,如果一个审批人无法处理请求,则将请求转发给下一个级别的审批人。下面是Java责任链模式设计一套流程系统的实现步骤:
1. 定义请求类LeaveRequest,其中包含请假人姓名、请假天数、请假原因等信息。
2. 定义抽象处理类LeaveHandler,其中包含一个对下一个处理器的引用,以及一个抽象方法handleRequest,用于处理请求。
3. 定义具体处理类GroupLeaderHandler、ManagerHandler、GeneralManagerHandler,分别实现LeaveHandler接口,并且实现handleRequest方法。
4. 将处理器组合成链,创建一个链式结构的处理器对象,将每个处理器对象的下一个处理器设置为链中的下一个对象。
5. 发送请求,向链中的第一个处理器对象发送请求,请求将沿着链进行处理,直到其中一个处理器对象处理请求为止。
6. 处理请求,每个处理器对象都有机会处理请求,如果一个处理器对象无法处理请求,则将请求传递给链中的下一个处理器对象。
7. 返回响应,当一个处理器对象成功地处理请求时,它可以返回一个响应,响应将沿着链返回给发送者。
具体实现流程如下:
1. 定义请求类LeaveRequest:
```java
public class LeaveRequest {
private String name;
private int days;
private String reason;
public LeaveRequest(String name, int days, String reason) {
this.name = name;
this.days = days;
this.reason = reason;
}
// 省略getter和setter方法
}
```
2. 定义抽象处理类LeaveHandler:
```java
public abstract class LeaveHandler {
protected LeaveHandler nextHandler;
public void setNextHandler(LeaveHandler nextHandler) {
this.nextHandler = nextHandler;
}
public abstract void handleRequest(LeaveRequest request);
}
```
3. 定义具体处理类GroupLeaderHandler、ManagerHandler、GeneralManagerHandler:
```java
public class GroupLeaderHandler extends LeaveHandler {
@Override
public void handleRequest(LeaveRequest request) {
if (request.getDays() <= 2) {
System.out.println("组长审批:" + request.getName()
+ "请假" + request.getDays() + "天,理由:" + request.getReason());
} else {
if (nextHandler != null) {
nextHandler.handleRequest(request);
}
}
}
}
public class ManagerHandler extends LeaveHandler {
@Override
public void handleRequest(LeaveRequest request) {
if (request.getDays() <= 5) {
System.out.println("经理审批:" + request.getName()
+ "请假" + request.getDays() + "天,理由:" + request.getReason());
} else {
if (nextHandler != null) {
nextHandler.handleRequest(request);
}
}
}
}
public class GeneralManagerHandler extends LeaveHandler {
@Override
public void handleRequest(LeaveRequest request) {
if (request.getDays() > 5) {
System.out.println("总经理审批:" + request.getName()
+ "请假" + request.getDays() + "天,理由:" + request.getReason());
} else {
if (nextHandler != null) {
nextHandler.handleRequest(request);
}
}
}
}
```
4. 将处理器组合成链:
```java
public class LeaveApprovalChain {
private LeaveHandler firstHandler;
public LeaveApprovalChain() {
firstHandler = new GroupLeaderHandler();
LeaveHandler managerHandler = new ManagerHandler();
LeaveHandler generalManagerHandler = new GeneralManagerHandler();
firstHandler.setNextHandler(managerHandler);
managerHandler.setNextHandler(generalManagerHandler);
}
public void processRequest(LeaveRequest request) {
firstHandler.handleRequest(request);
}
}
```
5. 发送请求,处理请求,返回响应:
```java
public class Client {
public static void main(String[] args) {
LeaveApprovalChain chain = new LeaveApprovalChain();
LeaveRequest request1 = new LeaveRequest("张三", 1, "家里有事");
LeaveRequest request2 = new LeaveRequest("李四", 3, "生病了");
LeaveRequest request3 = new LeaveRequest("王五", 7, "参加培训");
chain.processRequest(request1);
chain.processRequest(request2);
chain.processRequest(request3);
}
}
```
运行结果如下:
```
组长审批:张三请假1天,理由:家里有事
经理审批:李四请假3天,理由:生病了
总经理审批:王五请假7天,理由:参加培训
```
以上就是Java责任链模式设计一套流程系统的实现流程,通过责任链模式可以方便地实现多级别的请求处理机制,提高代码的可维护性和可扩展性。
阅读全文