目录
- [一、 啥是责任链模式?](#一、 啥是责任链模式?)
- [二、 为什么要用责任链模式?](#二、 为什么要用责任链模式?)
- [三、 责任链模式的实现方式](#三、 责任链模式的实现方式)
- [四、 责任链模式的优缺点](#四、 责任链模式的优缺点)
- [五、 责任链模式的应用场景](#五、 责任链模式的应用场景)
- [六、 总结](#六、 总结)
🌟我的其他文章也讲解的比较有趣😁,如果喜欢博主的讲解方式,可以多多支持一下,感谢🤗!
🌟了解命令模式请看: (十 五)趣学设计模式 之 命令模式!
✨更多请看个人主页: 码熔burning
一、 啥是责任链模式?
想象一下,一场激烈的足球比赛 ⚽️。 当球传到你脚下时,你需要判断自己是否能够处理这个球:如果可以,就自己处理;如果不行,就将球传给下一个队友。 球就这样在队员之间传递,直到有人能够处理它。
责任链模式,就是用来解决请求的发送者和多个接收者之间耦合的问题! 它可以将多个处理器组成一条链,并将请求沿着链传递,直到某个处理器能够处理它 🎁。
简单来说,就是把请求像踢皮球一样,在多个处理器之间传递,直到有人能搞定!
- 你需要处理一个请求,但是不知道哪个处理器能够处理它: 就像你需要将球传给最合适的队友 ⚽️!
- 你需要动态地添加和删除处理器: 就像你需要根据比赛情况调整球员的位置 🏃!
- 你需要保证请求一定会被处理: 就像你需要保证球最终会被踢进球门 🥅!
二、 为什么要用责任链模式?
用责任链模式,好处多多 👍:
- 解耦请求和处理: 请求的发送者不需要知道哪个处理器能够处理它,只需要将请求发送到链上 🤝!
- 灵活添加和删除处理器: 可以动态地添加和删除处理器,使得代码更加灵活 🤸!
- 简化代码: 避免大量的 if-else 语句,使得代码更加简洁优雅 💫!
- 提高代码的可维护性: 将每个处理器的逻辑封装起来,使得代码更加清晰易懂 💡!
三、 责任链模式的实现方式
责任链模式主要包含三个核心概念:
- 抽象处理者(Handler): 定义了处理请求的接口,并持有下一个处理者的引用 🤝!
- 具体处理者(ConcreteHandler): 实现了抽象处理者的接口,负责处理特定的请求 ⚙️!
- 客户端(Client): 创建责任链,并将请求发送到链上 🏭!
java
// 抽象处理者:审批人
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 {
@Override
public 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 {
@Override
public 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 {
@Override
public 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 元的报销
四、 责任链模式的优缺点
优点:
- 解耦请求和处理 🤝!
- 灵活添加和删除处理器 🤸!
- 简化代码 💫!
- 提高代码的可维护性 💡!
缺点:
- 请求可能无法被处理 😫!
- 调试困难 🤯!
五、 责任链模式的应用场景
- 审批流程: 报销审批、请假审批等等 📝!
- 事件处理: 鼠标点击、键盘输入等等 🖱️⌨️!
- 过滤器: 敏感词过滤、恶意请求过滤等等 🛡️!
- 异常处理: 捕获和处理异常 🚨!
六、 总结
- 责任链模式就像踢皮球,你不行我上! ⚽️
- 核心概念包括抽象处理者、具体处理者和客户端! 🔑
- 优点是解耦请求和处理、灵活添加和删除处理器、简化代码、提高代码的可维护性! 👍
- 缺点是请求可能无法被处理、调试困难! 👎
- 适用于需要将请求传递给多个处理器,直到有人能够处理它的场景! 🎯
希望这篇文章能让你彻底理解责任链模式! 💯 祝你学习愉快! 😄