filter设计模式-复杂的责任链-消除for循环小技巧.

来源:互联网 发布:数据库两张表关联查询 编辑:程序博客网 时间:2024/05/30 04:13

消除for循环两种方法.

1.责任链

2.递归


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中实现的性能到底如何呢?(下面测试的是吞吐量,数字越大越好)

流程引擎更复杂的责任链

0 0
原创粉丝点击