责任链模式

81 阅读2分钟

简介

维基百科:
责任链模式,包含一些命令对象和一系列的处理对象。每个处理对象决定它能处理哪些命令,它也知道如何将它不能处理的命令对象传递给该链中的下一个处理对象。该模式还描述了往该处理链的末尾添加新处理对象的方法。

我的理解:
多个请求处理对象形成一条链,每个请求处理对象都有自己的职责(即所负责处理的请求),请求从链的第一个节点往最后一个节点传播,在传播过程中,若当前节点能处理该请求就处理(处理完可以继续传播请求让其他节点处理,也可以直接中止处理);若当前节点不能处理该请求,就直接往下传播请求。

属于行为型模式

优点:

  1. 降低了对象之间的耦合度。该模式使得一个对象无须知道到底是哪个对象处理其请求以及链的结构,发送者和接收者也无须拥有对方的明确信息。
  2. 增强了系统的可扩展性。可以根据需要增加新的请求处理类,满足开闭原则。
  3. 增强了给对象指派职责的灵活性。
  4. 责任链简化了对象之间的连接。
  5. 责任分担。

类图

所有请求处理对象必须实现相同接口。

链的实现方式,以及如何实现传播?

通常链的实现方式是:每个处理对象都包含下一个处理对象的引用,从而形成一条链。
链的其他实现方式:直接使用数组列表表示一条链,然后封装成Chain(链)对象

源码应用

  1. Java Web的FilterChain。
  2. Netty的ChannelPipeline。
  3. Spring AOP编程:前置通知、后置通知、环绕通知、异常抛出通知、返回通知形成了一条责任链。