责任链模式

最近开发消息模块的任务告一段落,mentor设计的消息中心让我收获颇多,所以在此总结。

从责任链模式模式开始。

一开始,mentor跟我讲,咱们的消息中心使用了责任链的设计模式,啥叫个链儿呢?粗暴理解,就是个数据结构里的单链表。用它是为了将消息的发送方和接收方进行解耦,而且还能提高服务的可用性。咱们这个消息中心,就只管发消息,你不管啥消息都可以往里扔,它不仅能帮你持久化,还能帮你发出去。

我一听,好家伙,真厉害。

我还是第一次接触设计模式呢。

我先看看啥叫责任链模式吧~~

责任链模式

菜鸟教程 - 责任链模式

《Head First设计模式(中文版)》P616 - 责任链

What

我觉得数据结构是看得见摸得着的东西,最好理解。从数据结构的角度上看,它就是个单链表

责任链中的节点是对行为的抽象(接口)而实例化的对象,接口所能接受的类型是责任链能处理的抽象类型。

Why

优点:

  1. 将请求的接收者和发送者解耦
  2. 简化对象,因为它不知道责任链的结构
  3. 通过改变链内成员,动态地新增和删除责任

缺点:

  1. 不保证请求一定被执行,得有处理它的链节点
  2. 不容易观察运行时的特征,不利于除错

How

Talk is cheap, show you the code:

个人理解

责任链的这个链儿,能够接收某一类的对象,并对不同的对象进行不同的处理,这让我想起了C语言中的引用数组(数组中放的是内存地址,不是具体值),还有Java中的多态(超类数组中存放不同的子类对象)。有点儿见对象下菜碟儿的感觉😂。

还有个需要强调的点,责任链在一开始初始化的时候就初始化了我们配置好的所有节点,来一个对象,就开始判断它的类型,符合条件就处理,否则就交给下个节点处理。