当前位置: 首页 > news >正文

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

✅ 优点

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

⚠️ 缺点

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

🧩 使用建议

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

相关文章:

  • 4/24杂想
  • 30分钟算法题完成
  • 使用命令行加密混淆C#程序
  • python中的logging库详细解析
  • AI超级智能体教程(三)---程序调用AI大模型的四种方式(SpringAI+LangChain4j+SDK+HTTP)
  • 二项式分布html实验
  • Low Poly 风格 | 飞机飞行可视化系统
  • 【计算机视觉】CV实战- 深入解析基于HOG+SVM的行人检测系统:Pedestrian Detection
  • 深入解析Mlivus Cloud核心架构:rootcoord组件的最佳实践与调优指南
  • 防火墙技术深度解析:从包过滤到云原生防火墙的部署与实战
  • 软测面经(私)
  • API/SDK
  • 【金仓数据库征文】金仓数据库:开启未来技术脑洞,探索数据库无限可能
  • 【基于Qt的QQMusic项目演示第一章】从界面交互到核心功能实现
  • 基于HTML+CSS实现的动态导航引导页技术解析
  • 数字孪生:从概念到实践,重构未来产业的“虚拟镜像”
  • Java实现背景图片加自适应水印图片
  • Android 编译问题 prebuilts/clang/host/linux-x86
  • Node.js 包管理工具介绍
  • 彻底卸载Python
  • 体坛联播|卡马文加预计伤缺三个月,阿尔卡拉斯因伤退赛
  • 中央空管办组织加强无人机“黑飞”“扰航”查处力度
  • 中国海警登临铁线礁开展维权行动并展示五星红旗
  • 消费者买国外电话卡使用时无信号,店铺:运营商故障,较少见
  • 商标乱象调查:“120W”充电器功率仅12W,120W为商标名
  • 正荣地产旗下“H20正荣2”债未能于宽限期内支付分期偿付款,尚未就新兑付方案达成一致