设计模式 职责链模式
本文将介绍设计模式中的职责链模式。
一、什么职责链模式?
职责链模式适用于这样一种情况:可以处理请求的对象不止一个,并且这些对象组成了链式结构。
例如:
请求 - 一级审核员、二级审核员、三级审核员
职责链模式将请求的处理者串联成一条职责链,请求会在职责链中传递并处理。
二、实现
1. 结构
2. 角色
- Handler 抽象处理者:
- 定义了处理请求的方法
- 维护了一个类型为 Handler 的对象,它即是职责链的下家
- ConcreteHandler 具体处理者:
- 抽象处理者的子类
- 在处理请求的方法中,判断自身是否有处理权限,
- 如果有,处理
- 否则,将请求转发给下家
3. 简单示例
Handler:
1 |
|
ConcreteHandler:
1 |
|
客户端:
职责链模式本身不负责创建职责链,职责链的创建工作应该由客户端负责
1 |
|
三、纯粹与否
1. 纯粹版
处理者处理请求时,只能在 “处理” 和 “转发” 中二选一。
2. 不纯粹版
处理者处理请求时,可以 “处理”,可以 “转发”,也可以 “处理后转发”。
四、优缺点
1. 优点
- 客户端不需要关心请求具体会被哪个处理者处理,只需要将请求丢给职责链即可
- 请求者只需维持下家的引用,从而简化了职责链的关系安排
2. 缺点
- 请求可能因为职责链未正确配置而无法正确被处理
- 如果建链不当,可能导致循环调用
参考
- 《Java 设计模式》