责任链设计模式
责任链设计模式(Chain of Responsibility Pattern)是一种行为型设计模式,允许多个对象处理请求,从而避免请求发送者与接收者之间的耦合。请求沿着处理链传递,直到有对象处理它为止。
·
责任链设计模式概述
责任链设计模式(Chain of Responsibility Pattern)是一种行为型设计模式,允许多个对象处理请求,从而避免请求发送者与接收者之间的耦合。请求沿着处理链传递,直到有对象处理它为止。
核心思想
- 解耦发送者和接收者:发送者无需知道具体由哪个对象处理请求。
- 动态组合处理链:可以灵活调整或扩展处理链中的对象。
- 多个对象处理机会:每个处理对象决定是否处理请求或传递给下一个对象。
适用场景
- 需要多个对象动态决定处理请求的场景。
- 请求需要被多个对象之一处理,但具体处理者在运行时确定。
- 希望在不明确指定接收者的情况下向多个对象发送请求。
实现步骤
1. 定义抽象处理者接口或类 抽象类或接口声明处理方法,并维护对下一个处理者的引用。
public abstract class Handler {
protected Handler nextHandler;
public void setNextHandler(Handler nextHandler) {
this.nextHandler = nextHandler;
}
public abstract void handleRequest(Request request);
}
2. 实现具体处理者 每个具体处理者决定是否处理请求或传递给下一个处理者。
public class ConcreteHandlerA extends Handler {
@Override
public void handleRequest(Request request) {
if (request.getType().equals("TypeA")) {
// 处理请求
} else if (nextHandler != null) {
nextHandler.handleRequest(request);
}
}
}
3. 组装责任链 将多个处理者按顺序链接起来,形成处理链。
Handler handlerA = new ConcreteHandlerA();
Handler handlerB = new ConcreteHandlerB();
handlerA.setNextHandler(handlerB);
4. 发送请求 客户端将请求发送给链的第一个处理者。
Request request = new Request("TypeB");
handlerA.handleRequest(request);
优缺点分析
优点
- 降低耦合度:请求发送者无需知道具体处理者。
- 动态扩展:可以灵活增加或修改处理链。
- 增强灵活性:可以动态调整处理顺序。
缺点
- 请求可能未被处理:如果链中没有合适的处理者,请求可能未被处理。
- 性能问题:长链可能导致性能下降。
实际应用示例
日志系统 不同级别的日志(DEBUG、INFO、ERROR)由不同处理者处理。例如:
DebugLogger
处理DEBUG级别。ErrorLogger
处理ERROR级别。- 如果当前处理者无法处理,传递给下一个处理者。
审批流程 多级审批(如经理、总监、CEO)可以根据金额大小决定是否处理或传递。
public class ManagerHandler extends Handler {
@Override
public void handleRequest(ApprovalRequest request) {
if (request.getAmount() <= 1000) {
System.out.println("Manager approves the request.");
} else if (nextHandler != null) {
nextHandler.handleRequest(request);
}
}
}
与其他模式对比
- 与命令模式:责任链模式关注请求的传递和处理,命令模式关注请求的封装和执行。
- 与策略模式:责任链模式允许多个策略依次尝试,策略模式通常只选择一个策略执行。
责任链模式通过动态组合处理链,提供了一种灵活处理请求的方式。
更多推荐
所有评论(0)