责任链模式

职责链模式(Chain of Responsibility Pattern):避免请求发送者与接收者耦合在一起,让多个对象都有可能接收请求,将这些对象连接成一条链,并且沿着这条链传递请求,直到有对象处理它为止。

一句话总结:为请求创建一个接收此次请求的链。

适用场景

一个请求的处理,需要多个对象中的一个或者多个协作处理。

优点

  • 请求的发送者和接收者(处理者)进行解耦

  • 责任链可以动态组合

缺点

  • 如果责任链太长或者处理时间太长,影响性能

  • 责任链可能太长

下面我们引入一个应用场景,在大部分公司,一个产品上线,或者bug修复上线,通常会经过以下的一个过程。开发提交代码---QA测试---SRE上线,每一个环节都有自己的责任属性,这样就形成了一个责任链。接下来,我们就用代码来实现这个责任链模式。

这里面有一个非常重要的点,就在于Handler 内部有一个自己,即handler。每个责任链节点都要去check一下这个handler是否需要继续向下传递。

Golang Demo

Java Demo

UML

责任链模式UML

补充另一个版本的Java/Scala Demo 以及源码解析

Java Demo_

Scala Demo

UML_

源码解析

Last updated

Was this helpful?