责任链的三种实现方式比较
来源:互联网 发布:总做白日梦知乎 编辑:程序博客网 时间:2024/06/05 19:25
第一种方式:
实现handlerChain,handlerChain里面用一个列表保存所有的handler。
优点:直观。
缺点:只能顺序执行,前一个handler逻辑完全跑完了,再跑下一个逻辑。
例子如下:
第二种方式:
将handler链交给context保管,spring的责任链,web的listener链都是基于这种方式实现,类似于DFS。
优点:可以在前一个handler的任意地方调用下一个handler,逻辑调用更加灵活。
缺点:由于依旧通过数组来保管handler,责任链只能使用一次。
客户端通过context.proceed()来指明何时在一个handler里面调用下一个handler逻辑。如下图所示,实现了先调用后面handler逻辑,返回后再调用本身逻辑的功能。
第三种方式:
将handler链交给context保管,handler链是一个链表,而不是数组,有默认的handler作为责任链的起始,结束的标志,可以方便的找到下一个handler然后调起。netty基于这种方式实现其责任链。
优点:能够多次调用后面handler逻辑,比如在一个handler里面随时多次通过调用fireEvent()方法把事件传下去,让责任链后面的handler逻辑先执行。而第二种就只能传一次事件,让责任链后面的handler逻辑先执行。
缺点:复杂,责任链维护诸如默认handler,指针等变量有更大的空间复杂度。
示例可以找netty4相关代码学习。
- 责任链的三种实现方式比较
- 责任链模式实现的三种方式
- 多线程的三种实现方式及比较
- 六种常用的设计模式java实现(三)责任链模式
- 三种线程同步方式的比较
- JSP三种跳转方式的比较
- 关于三种分页方式的比较
- 三种深度拷贝方式的比较
- 三种方式遍历的比较
- jdbc statement 三种方式的比较
- 类加载的三种方式比较
- 三种 bottom half的实现方式 softirqs, tasklets, work queue 及之间的比较
- Action访问Servlet API的几种方式,其中方式三比较常用,下来是方式一,最后是方式二(实现接口的方式)
- 关于ViewPager、ViewFilpper、ViewFlow三种实现水平向滑动方式的比较
- 关于ViewPager、ViewFilpper、ViewFlow三种实现水平向滑动方式的比较
- 关于ViewPager、ViewFilpper、ViewFlow三种实现水平向滑动方式的比较(转)
- 关于ViewPager、ViewFilpper、ViewFlow三种实现水平向滑动方式的比较
- 关于ViewPager、ViewFilpper、ViewFlow三种实现水平向滑动方式的比较
- curl 使用举例详解(五)
- Spring和ActiveMQ整合的完整实例
- [区块链]Hyperledger Fabric源代码(基于v1.0 beta版本)阅读之乐扣老师解读系列 (六)BSSCP包之UTILS工具包
- js delete属性
- TensorFlow基础(二)
- 责任链的三种实现方式比较
- Android 程序在后台保活
- spark在windows上local模式下的缺失winutils.exe异常
- git 代码回滚
- egret对象池使用
- 替换原先list中固定位置的元素
- LeetCode 343. Integer Break 动态规划,状态转移方程
- 四种mysql存储引擎
- OkHttp3源码分析[DiskLruCache]