父文章 架构师之设计模式_个人渣记录仅为自己搜索用的博客-优快云博客
消除for循环两种方法.
1.责任链
2.递归
3. 对类改造迭代器 设计模式小感想
4. vistor模式 设计模式小感想
Filter算是责任链的模式中最复杂的设计模式优雅之处:
1. 无for循环
2. 请求前后都可以进行过滤.
3.动态
再简单说下几种实现方式:
1.普通的责任链:
for循环
2. 无for循环的这责任链:
public Filter next;
缺点: 静态,修改较麻烦.
3. 小技巧, 把成员属性next ,收归到Chain中管理,通过计算得出, 并且放在形参中传递.
优点: 1.无for 2.变更链条改动成本更低,直接变更List 3.能够实现request和response的处理
4. 这种是基于代理的责任链,好处是调用链过程中你是看不到filter.调用的.
典型例子是 mybatis的 Interceptor .
需要你通过 plugin()方法实现每个filter的封装代理类. 将需要拦截的类进行装饰. 把所有原类请求到代理到Interceptor.intercept(Invocation invocation)上.
比3的好处是 不需要将chain作为形参往下传.
filter模式也可以用责任链来实现,不过静态.不好动态修改.(Intercepting Filter模式详解 https://yq.aliyun.com/articles/46958)
https://my.oschina.net/raining0822/blog/278445 有说通过编程小技巧,巧妙实现消除next.
https://www.dozer.cc/2014/11/chain-of-responsibility.html 几种实现性能测试.
那上面4中实现的性能到底如何呢?(下面测试的是吞吐量,数字越大越好)
流程引擎更复杂的责任链