1. 概念
责任链模式(Chain of Responsibility),行为型设计模式之一。
这个链的形式更像是数据结构中的单链表,链中的每个节点都有自己的职责,同时也持有下一个节点的引用,属于自己职责范围内的请求就自行处理,并完成请求的处理;而不属于的职责就传递给下一个节点。每个节点都是如此循环,直至请求被处理或者已经没有处理节点。
基本结构
- Client:客户端,请求的发起者
- Handler:抽象处理者,声明一个请求方法,并在其中保持一个对下一个处理节点Handler对象的引用
- ConcreteHandler:具体处理角色,对请求进行处理;如果不能处理则将请求转发给下一个节点对象处理
2. 优缺点
- 优点
- 降低了系统耦合度。它将请求的发送者与接收者进行了解耦
- 简化了对象。它使得对象不需要知道链的结构
- 增强了给对象指派职责的灵活性。通过改变链内
- 缺点
- 性能问题。每个请求都要从头遍历到链尾,特别是在责任链比较长的时候,性能是一个非常大的问题
- 可能请求得不到处理,被放置在责任链的末端
- 调试不方便。在链条比较长和环节比较多的时候,调试时逻辑可能比较复杂
在设计责任链模式的程序时,要注意的点
- 明确请求者与请求内容。发送请求的对象为请求者,请求的内容通过发送请求时的参数进行传递
- 明确责任人。责任人是构成责任链的关键要素,即是链条上的节点
- 责任人可自由组合。责任链上的责任人可以根据业务的具体逻辑进行自由组合和排序
3. 使用场景
- 有多个对象可以处理同一个请求,具体哪个对象处理该请求由运行时自动确定
- 请求的处理具有明显的层层递进关系
- 请求的处理流程和顺序需要程序运行时动态确定
网友评论