Java学设计模式之责任链模式
一、责任链模式概念
1.1 什么是责任链模式
责任链模式是一种行为型设计模式,它允许多个对象在处理请求时依次处理,直到其中一个对象能够处理该请求为止。这些对象被连接成一条链,请求沿着链传递,直到被处理为止。责任链模式将请求发送者和接收者解耦,使得多个对象都有机会处理请求,同时避免了请求的发送者需要知道具体哪个对象会处理请求的情况。
结构
责任链模式一般包含以下几个要素:
-
Handler(处理者): 定义了处理请求的接口,并且通常包含一个指向下一个处理者的引用。处理者接收到请求后,可以选择进行处理,或者将请求传递给下一个处理者。
-
ConcreteHandler(具体处理者): 实现了处理请求的具体逻辑。如果能够处理请求,就进行处理;否则将请求传递给下一个处理者。
-
Client(客户端): 创建并且发送请求给处理者对象。
二、责任链模式代码
2.1 处理者
public abstract class Approver { protected Approver nextApprover; protected double approvalLimit; void setNextApprover(Approver nextApprover) { this.nextApprover = nextApprover; } abstract void processRequest(double amount); }
2.2 具体处理者
public class Manager extends Approver { Manager(double approvalLimit) { this.approvalLimit = approvalLimit; } @Override void processRequest(double amount) { if (amount <= approvalLimit) { System.out.println("总经理批准的报销:" + amount); } else if (nextApprover != null) { nextApprover.processRequest(amount); } else { System.out.println("没有人可以处理的报销:" + amount); } } }
public class VicePresident extends Approver{ VicePresident(double approvalLimit) { this.approvalLimit = approvalLimit; } @Override void processRequest(double amount) { if (amount <= approvalLimit) { System.out.println("副总裁批准的报销:" + amount); } else if (nextApprover != null) { nextApprover.processRequest(amount); } else { System.out.println("没有人可以处理的报销:" + amount); } } }
public class President extends Approver { President(double approvalLimit) { this.approvalLimit = approvalLimit; } @Override void processRequest(double amount) { if (amount <= approvalLimit) { System.out.println("总裁批准的报销:" + amount); } else { System.out.println("没有人可以处理的报销:" + amount); } } }
2.3 测试类
public class ApproverPatternTest { public static void main(String[] args) { // 创建处理者对象 Manager manager = new Manager(1000); VicePresident vicePresident = new VicePresident(5000); President president = new President(10000); // 构建责任链 manager.setNextApprover(vicePresident); vicePresident.setNextApprover(president); // 发送请求 manager.processRequest(800); manager.processRequest(5000); manager.processRequest(15000); // 输出: // 总经理批准的报销:800.0 // 副总裁批准的报销:5000.0 // 没有人可以处理的报销:15000.0 } }
三、总结
责任链模式的优点包括:
- 将请求发送者和接收者解耦,增强了系统的灵活性。
- 允许动态地增加或修改处理者,无需修改客户端代码。
然而,责任链模式也有一些缺点:
- 请求可能会在责任链中被多次传递,直到被处理为止,这可能会影响性能。
- 如果责任链过长或者处理者对象之间存在循环引用,可能会导致系统性能下降或者请求无法被处理。
本文作者:启航黑珍珠号
本文链接:https://www.cnblogs.com/Linzj5950/p/18184277
版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】凌霞软件回馈社区,博客园 & 1Panel & Halo 联合会员上线
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】博客园社区专享云产品让利特惠,阿里云新客6.5折上折
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步