欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 新闻 > 国际 > 23种设计模式-行为型模式之责任链模式(Java版本)

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

2025/4/29 20:15:37 来源:https://blog.csdn.net/DreamCollector/article/details/147517239  浏览:    关键词: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 {@Overridepublic void handleRequest(int days) {if (days <= 1) {System.out.println("TeamLeader 批准了 " + days + " 天的假期");} else if (next != null) {next.handleRequest(days);}}
}public class Manager extends Handler {@Overridepublic void handleRequest(int days) {if (days <= 3) {System.out.println("Manager 批准了 " + days + " 天的假期");} else if (next != null) {next.handleRequest(days);}}
}public class Director extends Handler {@Overridepublic 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); // 输出:请假天数太长,无法批准!}
}

✅ 优点

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

⚠️ 缺点

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

🧩 使用建议

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

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词