责任链模式通过将请求在多个处理器间链式传递,使请求发送者与接收者解耦,每个处理器判断是否处理请求或转发给下一节点,直到请求被处理或链结束;该模式由handler定义处理接口,concretehandler实现具体逻辑,client构建链并发送请求,典型应用场景如审批流程中根据金额由主管、经理或ceo逐级处理,示例中3000元请求由director处理;其核心优势包括松耦合、动态调整链结构、避免冗长条件判断,但也需注意请求可能未被处理的问题,因此建议明确处理器职责边界、控制链长度、防止循环引用,并可在链尾添加默认处理器确保请求必被处理,同时可结合建造者或装饰器模式增强灵活性,适用于审批、过滤、拦截等需多级处理的场景。

责任链模式(Chain of Responsibility Pattern)是一种行为设计模式,它让多个处理器(处理对象)都有机会处理请求,从而解耦请求的发送者和接收者。请求在处理器链中逐级传递,直到某个处理器处理它为止。
在责任链模式中,每个处理器都持有一个对下一个处理器的引用。当一个请求到来时,第一个处理器判断自己是否能处理,如果不能,就将请求“转发”给下一个处理器。这个过程一直持续,直到有处理器处理该请求,或者请求到达链尾被丢弃。
这种机制实现了“请求发送者”与“具体处理者”之间的解耦,也允许动态地组织处理流程。
一个典型的责任链包含以下几个部分:
Handler(处理器抽象类或接口)
定义处理请求的方法,以及设置下一个处理器的方法。
ConcreteHandler(具体处理器)
实现处理逻辑。每个具体处理器决定是自己处理请求,还是将请求传递给下一个处理器。
Client(客户端)
创建处理器链,并向链的起始节点发送请求。
假设一个报销审批系统:
使用责任链模式可以这样设计:
abstract class Approver {
protected Approver next;
public void setNext(Approver next) {
this.next = next;
}
public abstract void processRequest(ExpenseRequest request);
}
class Manager extends Approver {
public void processRequest(ExpenseRequest request) {
if (request.getAmount() <= 1000) {
System.out.println("Manager approved request of " + request.getAmount());
} else if (next != null) {
next.processRequest(request);
}
}
}
class Director extends Approver {
public void processRequest(ExpenseRequest request) {
if (request.getAmount() <= 5000) {
System.out.println("Director approved request of " + request.getAmount());
} else if (next != null) {
next.processRequest(request);
}
}
}
class CEO extends Approver {
public void processRequest(ExpenseRequest request) {
System.out.println("CEO approved request of " + request.getAmount());
}
}客户端使用:
Approver manager = new Manager(); Approver director = new Director(); Approver ceo = new CEO(); manager.setNext(director); director.setNext(ceo); ExpenseRequest req = new ExpenseRequest(3000); manager.processRequest(req); // Director 处理
松耦合
请求发送者不需要知道哪个具体对象会处理请求,只需交给链的头部即可。
动态调整链结构
可以在运行时添加、删除或调整处理器顺序。
避免条件判断堆叠
传统方式可能用一长串 if-else 判断谁处理,而责任链用对象链代替了硬编码逻辑。
请求可能未被处理
如果链尾都无法处理,且没有兜底机制,请求可能被忽略。因此有时需要默认处理器或异常处理。
明确处理边界
每个处理器应清楚自己处理的范围,避免重复处理或遗漏。
防止链过长或循环
链太长会影响性能,注意设置合理的终止条件。避免设置错误导致循环引用。
可选:支持“必须处理”语义
某些场景下要求请求必须被处理,可以在链尾加一个默认处理器。
结合其他模式使用
常与建造者模式(构建链)、装饰器模式(增强处理)等结合使用。
基本上就这些。责任链模式通过将请求的处理责任“链式传递”,让系统更灵活、扩展性更强,特别适合审批、过滤、拦截等场景。关键在于合理设计每个处理器的职责边界和传递逻辑。
以上就是责任链模式怎么处理请求 多处理器链式传递机制的详细内容,更多请关注php中文网其它相关文章!
每个人都需要一台速度更快、更稳定的 PC。随着时间的推移,垃圾文件、旧注册表数据和不必要的后台进程会占用资源并降低性能。幸运的是,许多工具可以让 Windows 保持平稳运行。
Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号