一、责任链模式
如果有多个对象都有机会处理请求,责任链可使请求的发送者和接收者解耦,请求沿着责任链传递,直到有一个对象处理了它为止。
二、示例
公司采购安排的项目:公司内部要采购物品的话,不同的价格则需要不同阶层的领导签字,决策人有组长、部长、副总、总裁
使用传统的方法可是用switch语句将不同的价格区分不同的决策人,但是这样所有的逻辑都在一个处理类中较复杂,且如果中间增加或减少了决策人拓展不便
为了实现对象之间更好的解耦,则引入责任链模式,将请求从低到高一层一层的往下传,如果本人执行不了,就传递给下一层执行,直到有对象可以处理为止
1.定义采购对象
1 |
|
2.定义决策者的抽象类
1 |
|
3.各决策者在自己的责任范围内实现责任方法
1 |
|
1 |
|
1 |
|
1 |
|
4.定义每一层决策者的下一层决策对象,调用时直接调用最上层即可
1 |
|
三、总结
- 优点:
- 将请求的发送者和接收者解耦,使多个对象都有机会处理这个请求
- 可以简化对象,因为它无须知道链的结构
- 可以动态地增加或删减处理请求的链结构
- 缺点:
- 请求从链的开头进行遍历,对性能有一定的损耗
- 并不保证请求一定被处理
- 适用场合:
- 有多个对象可以处理一个请求
- 不明确接收者的情况
- 责任链可有序、无序链,线型、树形、环形链
Java设计模式所有示例代码,持续更新中