责任链模式
2021-04-15 本文已影响0人
joeylong
1、责任链模式定义:
当有请求处理时,可将请求沿着链路传递,直到有对象处理为止。
2、责任链模式优点:
每个类单一处理自己的职责,不该处理的传给下一个对象处理,明确范围职责。
3、责任链模式结构:
- 抽象处理者(Handler)角色:定义一个处理请求的接口,包含抽象处理方法和一个后继连接。
- 具体处理者(Concrete Handler)角色:实现抽象处理者的处理方法,判断能否处理本次请求,如果可以处理请求则处理,否则将该请求转给它的后继者。
- 客户类(Client)角色:创建处理链,并向链头的具体处理者对象提交请求,它不关心处理细节和请求的传递过程。
4、代码
/**
* 抽象处理者
*/
@Data
abstract class Employees {
private Employees next;
public Employees getNext() {
return next;
}
//处理请求的方法
public abstract void handleRequest(int day);
}
/**
* 具体处理者
*/
public class Manager extends Employees {
@Override
public void handleRequest(int day) {
if(day <= 5){
System.out.println("经理审批");
} else {
System.out.println("经理无法审批,下一个");
if(getNext() != null){
getNext().handleRequest(day);
}else {
System.out.println("请假天数太多,没有人批准该假条!");
}
}
}
}
/**
* 具体处理者
*/
public class GroupLeader extends Employees {
@Override
public void handleRequest(int day) {
if(day <= 2){
System.out.println("组长审批");
} else {
System.out.println("组长无法审批,下一个");
if(getNext() != null){
getNext().handleRequest(day);
}else {
System.out.println("请假天数太多,没有人批准该假条!");
}
}
}
}
/**
* 测试
*/
public class responsibilityTest {
public static void main(String[] args) {
Employees groupLeader = new GroupLeader();
Employees manager = new Manager();
groupLeader.setNext(manager);
groupLeader.handleRequest(8);
}
}