责任链模式
职责链模式(Chain of Responsibility Pattern):避免请求发送者与接收者耦合在一起,让多个对象都有可能接收请求,将这些对象连接成一条链,并且沿着这条链传递请求,直到有对象处理它为止。
一句话总结:为请求创建一个接收此次请求的链。
适用场景
一个请求的处理,需要多个对象中的一个或者多个协作处理。
优点
请求的发送者和接收者(处理者)进行解耦
责任链可以动态组合
缺点
如果责任链太长或者处理时间太长,影响性能
责任链可能太长
下面我们引入一个应用场景,在大部分公司,一个产品上线,或者bug修复上线,通常会经过以下的一个过程。开发提交代码---QA测试---SRE上线,每一个环节都有自己的责任属性,这样就形成了一个责任链。接下来,我们就用代码来实现这个责任链模式。
这里面有一个非常重要的点,就在于Handler 内部有一个自己,即handler。每个责任链节点都要去check一下这个handler是否需要继续向下传递。
Golang Demo
Java Demo
UML

补充另一个版本的Java/Scala Demo 以及源码解析
Java Demo_
Scala Demo
UML_
源码解析
Last updated
Was this helpful?