职责链模式
封面图
•
2025-12-17
•
设计模式
220
0
0
0
**职责链模式(Chain of Responsibility Pattern)** 是一种行为设计模式,它允许你将请求的发送者和接收者解耦。通过将请求沿着处理链传递,直到有一个对象能够处理它为止。 --- ## 📌 一、定义 **职责链模式**:在不指定接收对象的前提下,让多个对象都有机会处理请求,从而避免请求的发送者和接收者之间的耦合。 --- ## 🧩 二、核心思想 - **请求被封装成一个对象**。 - **每个处理者都包含对下一个处理者的引用**。 - **请求沿着链传递,直到有对象处理它为止**。 --- ## 🧱 三、结构组成 职责链模式通常包含以下几个角色: 1. **抽象处理者(Handler)** 定义一个处理请求的接口,通常包含一个处理方法和一个指向下一个处理者的引用。 2. **具体处理者(Concrete Handler)** 实现处理请求的逻辑,如果可以处理请求,则处理;否则将请求传递给下一个处理者。 3. **客户端(Client)** 创建处理链,并向链中的第一个处理者发送请求。 --- ## ✅ 四、优点 - **降低耦合度**:请求的发送者和接收者之间没有直接依赖。 - **灵活扩展**:可以动态地添加或删除处理者。 - **符合开闭原则**:增加新的处理者不需要修改已有代码。 --- ## ❌ 四、缺点 - **请求可能未被处理**:如果链中没有合适的处理者,请求可能会被忽略。 - **性能问题**:如果链过长,可能会影响性能。 --- ## 📝 五、示例代码(Java) ```java // 抽象处理者 abstract class Handler { protected Handler next; public void setNext(Handler next) { this.next = next; } public abstract void handleRequest(String request); } // 具体处理者 A class ConcreteHandlerA extends Handler { @Override public void handleRequest(String request) { if (request.equals("A")) { System.out.println("ConcreteHandlerA 处理了请求"); } else if (next != null) { next.handleRequest(request); } } } // 具体处理者 B class ConcreteHandlerB extends Handler { @Override public void handleRequest(String request) { if (request.equals("B")) { System.out.println("ConcreteHandlerB 处理了请求"); } else if (next != null) { next.handleRequest(request); } } } // 客户端 public class Client { public static void main(String[] args) { Handler handlerA = new ConcreteHandlerA(); Handler handlerB = new ConcreteHandlerB(); // 构建职责链 handlerA.setNext(handlerB); // 发送请求 handlerA.handleRequest("A"); // 输出: ConcreteHandlerA 处理了请求 handlerA.handleRequest("B"); // 输出: ConcreteHandlerB 处理了请求 handlerA.handleRequest("C"); // 无输出(未被处理) } } ``` --- ## 🔄 六、适用场景 - 需要将请求的处理交给多个对象中的某一个。 - 请求的处理需要动态配置或组合。 - 想避免请求发送者与接收者之间的紧密耦合。 --- ## 🔍 七、与其他模式对比 | 模式 | 用途 | 与职责链的区别 | |------|------|----------------| | 策略模式 | 动态改变算法 | 不涉及链式调用 | | 命令模式 | 封装请求为对象 | 通常不构成链 | | 观察者模式 | 一对多的通信 | 无链式传递 | --- 如果你有具体的业务场景或想了解如何在某个框架中应用职责链模式(如 Spring、Java Web Filter 等),欢迎继续提问!
上一篇:
如果觉得做人累了,就看看那些?
下一篇:
震惊世界的中国秘方留着有用
标题录入,一次不能超过6条
留言
评论