责任链模式

责任链模式

责任链模式由两个重要组件组成,请求(指令的产生者)以及处理器(指令的处理者)。 这个模式在很多常用的框架中都可以找到踪迹,比如netty的channelHandler, Spring Security中的Filter等等。

简单来讲,请求产生后会在处理器链中按一定的顺序传播,每个处理器的逻辑分为两部分

  • 判断是否能处理相应的请求

  • 如果判断能处理到达的请求,则处理,否则继续“向下”传播(即责任器链上的每个节点都有它自己的责任)

它的UML图如下:Request接口代表了请求(或者说是指令的产生者),而handler接口代表了处理器(或者说是指令的处理器),每个处理器都有对链上相邻处理器的引用,当它自己不能处理到达的请求时 ,会将请求进一步传播给相邻的处理器.

以Netty中的channelHandler为例,它是用来channel中IO事件的处理器,当IO事件产生时,channel会将这个事件交给与之关联的channelPipeline,而channelPipeline事实上就是一组前后相连的channelHandler, IO事件沿着pipeline一直传播,直到被channelHandler处理或到达pipeline的末端.

另外,值得一提的是,虽然被称为是责任链,但请求在责任器链中的传播并不一定要是线形的,有些责任器可能会有类似于“分发”器一样在的功能,在这种情况下,责任器就会是“树形”的形状.

resonsibility-pattern

参考文献

  1. http://www.oodesign.com/chain-of-responsibility-pattern.html

  2. https://en.wikipedia.org/wiki/Chain-of-responsibility_pattern

示例代码

  1. https://github.com/Essviv/designPattern/tree/master/src/main/java/com/cmcc/syw/responsibility
您的支持将鼓励我继续创作!