[设计模式] 再识责任链模式
·
前言
今天通过面试复习了责任链模式. 又回头看了下之前的笔记. 突然就加深了理解.
正文
之前理解
之前的理解. 责任链就是一个链式结构, 经典的例子就是一个任务在几个人之间传递执行.

面试完之后想了想发现事情并没有想象滴那么简单.
面试解答: 责任链就是一个责任流程. 责任链可以在责任链的任意一处结束. 例子: 医院看病流程. (挂号 -> 问诊 -> 取药 -> 挂号台付款)
主要业务场景: 业务流 / 热插拔流
目前理解
我发现, 对于很多事物. 从名字上进行划分就非常Nice.
责任链模式. 主体包括责任和链这2个部分. 个人认为, 所谓责任链模式. 即, 以责任为载体的链式处理结构. 链式中处理责任的单元, 个人认为叫做处理单元. 责任在链式中传播, 而不需要知道责任究竟是被哪个责任单元执行. 责任链, 其实就是一个责任与处理单元的解耦过程.
这样, 我们回头看那个问题.
(病人) (
挂号->问诊->取药->挂号台付款)流程是责任链么?
答案: 是的.
- 他们都有相同的责任: 处理病人.
- 在业务流程中, 病人这一责任可以链式传递下去. 并且可以跳过某些责任处理单元. 或者在任意的责任处理单元上停止.
再回头看一看. 会发现如下的几个特性:
- 责任链中, 处理的责任对象基本相同.
- 责任处理单元需要实现同一责任处理接口.
- 责任在传递的过程中可能会发生变化.
- 责任可以跳过某些处理单元. 或者在中间的某一处理单元上停止.
责任链的主要优点在于解耦合. 将责任和责任处理单元解除耦合. 可以使得责任在多个处理单元上以链式的形式进行流动.
责任链的优点同时也是责任链的缺点. 那就是责任可以跳过某些责任处理单元, 且在任一责任处理单元上停止. 因为责任链的灵活性和链式流动性, 责任链无法确定到底是哪个责任处理单元处理的责任.
简单代码实现
了解以上特性. 不难写出如下代码:
class People{
public String name;
}
// 处理接口
class ISolveProblem{
public void solve(People people);
}
// 挂号
class GuaHao implements ISolveProblem{
public void solve(People people){
System.out.println("挂号"+people.name);
}
public ISolveProblem nextNode;
}
// 问诊
class WenZhen implements ISolveProblem{
public void solve(People people){
System.out.println("问诊"+people.name);
}
public ISolveProblem nextNode;
}
// 开药
class KaoYao implements ISolveProblem{
public void solve(People people){
System.out.println("问诊"+people.name);
}
public ISolveProblem nextNode;
}
To Be Continue
More
关于责任链的通用类图. 可以看下我之前的总结:
设计模式之(四) 行为模式
更多推荐
所有评论(0)