责任链模式的设计要义以及经典应用

1、提取责任链模式的藕和丝

设计模式之责任链模式:使用“藕断丝连”的设计哲学去解释,“请求的发送”和“请求的接收”是2节藕,而handlerChain是丝。

这是我在工作和学习中总结的设计最高要义:“藕断丝连”。

2、责任链模式的设计要义

将框架级别的代码抽象到抽象类之中,将具体逻辑下放给不同的逻辑单元。责任链可以使用数组或者链表来实现,维护责任链的工作包括新增节点,触发链上的工作。

责任链模式各“逻辑单元”被维护在数组中或者链表中,一个某个逻辑单元已经成功处理了“请求”,那么就停止请求在“责任链”上的流动,这是常规的使用办法。

责任链模式还有另一种处理模式,即通过递归调用时责任链上的所有“逻辑单元”都处理一遍“请求”。

前者是成功即停止,后者是“雨露均沾”。

3、责任链模式的经典应用

哪些框架或者现有的产品使用了责任链模式呢?

servlet Fliter 和sping Interptor都使用了责任链模式,Netty中的ChainPipeline也使用的责任链模式,而且它的责任链是使用链表实现的,不仅可以在头部或者尾部添加Handler节点,还提供在某个现有节点的前面或者后面插入新的节点,为使用者组合“逻辑单元”提供了灵活性。 据说Dubbo Filter也使用了责任链模式,目标还没有学到Dubbo框架,后边遇到时重点关注一下其中的责任链模式是如何实现的。Mybatis的二级缓存和插件的组织均使用了责任链模式,Mybatis的二级缓存中使用责任链模式既没有使用数组,也没有可见的容器(链表),而是与装饰器模式一起使用,有点像直接构建链表,我们看到的下一个节点持有上一个节点的引用,,这一个是比较典型的责任链模式!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值