责任链模式是一种行为型设计模式,它使多个对象都有机会处理请求,从而避免请求的发送者与接收者之间的耦合关系。将这些对象连成一条链,并沿着这条链传递请求,直到有对象处理它为止。
public abstract class Handler {
protected Handler next;
public void setNext(Handler next) {
this.next = next;
}
public abstract void handleRequest(int days);
}
public class TeamLeader extends Handler {
@Override
public void handleRequest(int days) {
if (days <= 1) {
System.out.println("TeamLeader 批准了 " + days + " 天的假期");
} else if (next != null) {
next.handleRequest(days);
}
}
}
public class Manager extends Handler {
@Override
public void handleRequest(int days) {
if (days <= 3) {
System.out.println("Manager 批准了 " + days + " 天的假期");
} else if (next != null) {
next.handleRequest(days);
}
}
}
public class Director extends Handler {
@Override
public void handleRequest(int days) {
if (days <= 7) {
System.out.println("Director 批准了 " + days + " 天的假期");
} else {
System.out.println("请假天数太长,无法批准!");
}
}
}
public class LeaveRequest {
public static void main(String[] args) {
Handler teamLeader = new TeamLeader();
Handler manager = new Manager();
Handler director = new Director();
teamLeader.setNext(manager);
manager.setNext(director);
teamLeader.handleRequest(2); // 输出:Manager 批准了 2 天的假期
teamLeader.handleRequest(5); // 输出:Director 批准了 5 天的假期
teamLeader.handleRequest(10); // 输出:请假天数太长,无法批准!
}
}
责任链模式非常适合处理审批流程、过滤器链、日志处理等需要“逐层传递、逐层判断”的场景。