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

(十 六)趣学设计模式 之 责任链模式!

在这里插入图片描述

目录

    • 一、 啥是责任链模式?
    • 二、 为什么要用责任链模式?
    • 三、 责任链模式的实现方式
    • 四、 责任链模式的优缺点
    • 五、 责任链模式的应用场景
    • 六、 总结

🌟我的其他文章也讲解的比较有趣😁,如果喜欢博主的讲解方式,可以多多支持一下,感谢🤗!
🌟了解命令模式请看: (十 五)趣学设计模式 之 命令模式!
✨更多请看个人主页: 码熔burning

一、 啥是责任链模式?

想象一下,一场激烈的足球比赛 ⚽️。 当球传到你脚下时,你需要判断自己是否能够处理这个球:如果可以,就自己处理;如果不行,就将球传给下一个队友。 球就这样在队员之间传递,直到有人能够处理它。

责任链模式,就是用来解决请求的发送者和多个接收者之间耦合的问题! 它可以将多个处理器组成一条链,并将请求沿着链传递,直到某个处理器能够处理它 🎁。

简单来说,就是把请求像踢皮球一样,在多个处理器之间传递,直到有人能搞定!

  • 你需要处理一个请求,但是不知道哪个处理器能够处理它: 就像你需要将球传给最合适的队友 ⚽️!
  • 你需要动态地添加和删除处理器: 就像你需要根据比赛情况调整球员的位置 🏃!
  • 你需要保证请求一定会被处理: 就像你需要保证球最终会被踢进球门 🥅!

二、 为什么要用责任链模式?

用责任链模式,好处多多 👍:

  • 解耦请求和处理: 请求的发送者不需要知道哪个处理器能够处理它,只需要将请求发送到链上 🤝!
  • 灵活添加和删除处理器: 可以动态地添加和删除处理器,使得代码更加灵活 🤸!
  • 简化代码: 避免大量的 if-else 语句,使得代码更加简洁优雅 💫!
  • 提高代码的可维护性: 将每个处理器的逻辑封装起来,使得代码更加清晰易懂 💡!

三、 责任链模式的实现方式

责任链模式主要包含三个核心概念:

  • 抽象处理者(Handler): 定义了处理请求的接口,并持有下一个处理者的引用 🤝!
  • 具体处理者(ConcreteHandler): 实现了抽象处理者的接口,负责处理特定的请求 ⚙️!
  • 客户端(Client): 创建责任链,并将请求发送到链上 🏭!
// 抽象处理者:审批人
public abstract class Approver {protected Approver nextApprover; // 下一个审批人public void setNextApprover(Approver nextApprover) {this.nextApprover = nextApprover;}public abstract void approve(int amount); // 审批请求
}// 具体处理者:主任
public class Director extends Approver {@Overridepublic void approve(int amount) {if (amount <= 1000) {System.out.println("主任批准了 " + amount + " 元的报销");} else {if (nextApprover != null) {nextApprover.approve(amount); // 传递给下一个审批人} else {System.out.println("金额太大,无法批准");}}}
}// 具体处理者:经理
public class Manager extends Approver {@Overridepublic void approve(int amount) {if (amount <= 5000) {System.out.println("经理批准了 " + amount + " 元的报销");} else {if (nextApprover != null) {nextApprover.approve(amount); // 传递给下一个审批人} else {System.out.println("金额太大,无法批准");}}}
}// 具体处理者:总经理
public class CEO extends Approver {@Overridepublic void approve(int amount) {System.out.println("总经理批准了 " + amount + " 元的报销");}
}// 客户端
public class Client {public static void main(String[] args) {// 创建审批人Director director = new Director();Manager manager = new Manager();CEO ceo = new CEO();// 设置责任链director.setNextApprover(manager);manager.setNextApprover(ceo);// 发起报销请求director.approve(500); // 主任批准director.approve(2000); // 经理批准director.approve(6000); // 总经理批准}
}

代码解释

  • Approver 类是抽象处理者,定义了 approve 方法和 setNextApprover 方法。
  • Director 类、Manager 类和 CEO 类是具体处理者,实现了 approve 方法,负责处理特定金额的报销请求。
  • Client 类是客户端,负责创建责任链,并将报销请求发送到链上。

输出结果

主任批准了 500 元的报销
经理批准了 2000 元的报销
总经理批准了 6000 元的报销

四、 责任链模式的优缺点

优点:

  • 解耦请求和处理 🤝!
  • 灵活添加和删除处理器 🤸!
  • 简化代码 💫!
  • 提高代码的可维护性 💡!

缺点:

  • 请求可能无法被处理 😫!
  • 调试困难 🤯!

五、 责任链模式的应用场景

  • 审批流程: 报销审批、请假审批等等 📝!
  • 事件处理: 鼠标点击、键盘输入等等 🖱️⌨️!
  • 过滤器: 敏感词过滤、恶意请求过滤等等 🛡️!
  • 异常处理: 捕获和处理异常 🚨!

六、 总结

  • 责任链模式就像踢皮球,你不行我上! ⚽️
  • 核心概念包括抽象处理者、具体处理者和客户端! 🔑
  • 优点是解耦请求和处理、灵活添加和删除处理器、简化代码、提高代码的可维护性! 👍
  • 缺点是请求可能无法被处理、调试困难! 👎
  • 适用于需要将请求传递给多个处理器,直到有人能够处理它的场景! 🎯

希望这篇文章能让你彻底理解责任链模式! 💯 祝你学习愉快! 😄

http://www.lryc.cn/news/546462.html

相关文章:

  • 动态规划/贪心算法
  • PH热榜 | 2025-03-04
  • Mybatis-Plus 插件机制与自定义插件实现
  • 开源表单、投票、测评平台部署教程
  • 行为模式---命令模式
  • zabbix配置邮件告警
  • INI和CSV文件保存
  • 汽车智能钥匙中PKE低频天线的作用
  • 计算机等级考试
  • Geotools中获取Shapefile的属性表格字符集编码的一种方法
  • HTTP 与 HTTPS 协议:从基础到安全强化
  • Scrapy爬虫框架介绍
  • Stable Diffusion模型高清算法模型类详解
  • 软考网络安全口诀
  • Baklib内容中台赋能企业智管
  • vscode+vue前端开发环境配置
  • Python项目-基于深度学习的校园人脸识别考勤系统
  • 浅谈C++函数特性
  • Python----数据分析(Matplotlib三:绘图二:箱图,散点图,饼图,热力图,3D图)
  • 高性能PHP框架webman爬虫引擎插件,如何爬取数据
  • 【2025年后端开发终极指南:云原生、AI融合与性能优化实战】
  • 健康养生:开启活力人生的钥匙
  • vue2+ele-ui实践
  • 三维重建(十五)——多尺度(coarse-to-fine)
  • SparkStreaming之04:调优
  • 勿以危小而为之勿以避率而不为
  • JavaWeb后端基础(4)
  • SpringBoot调用DeepSeek
  • 记录一下本地部署Dify的坑
  • LC109. 有序链表转换平衡二叉搜索树