23种设计模式-行为型模式之责任链模式(Java版本)

Java 责任链模式(Chain of Responsibility Pattern)详解

什么是责任链模式?

责任链模式是一种行为型设计模式,它使多个对象都有机会处理请求,从而避免请求的发送者与接收者之间的耦合关系。将这些对象连成一条链,并沿着这条链传递请求,直到有对象处理它为止。


使用场景

  • 多个对象可以处理一个请求,具体由运行时决定哪个对象处理
  • 动态指定请求的处理顺序
  • 需要解耦请求发送者与处理者

️ 模式结构

  • Handler(抽象处理者):定义处理请求的接口,并包含对下一个处理者的引用
  • ConcreteHandler(具体处理者):实现请求的处理逻辑,如果不能处理则转发给下一个处理者
  • Client(客户端):构造处理链并发送请求

✅ 示例:请假审批流程

抽象处理者

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); // 输出:请假天数太长,无法批准!
    }
}

✅ 优点

  • 降低耦合度,请求者无需知道处理逻辑细节
  • 动态组合处理流程,增强灵活性
  • 符合开闭原则,新增处理节点无需修改其他节点

⚠️ 缺点

  • 可能导致请求没有被处理
  • 调试不便,链路较长时难以追踪请求处理流程

使用建议

责任链模式非常适合处理审批流程、过滤器链、日志处理等需要“逐层传递、逐层判断”的场景。

你可能感兴趣的:(23种设计模式,java,设计模式,责任链模式,jvm,开发语言)