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

本文探讨了设计模式中消除for循环的方法,包括责任链模式、递归及迭代器的应用,并对比了几种责任链模式的不同实现及其优缺点。此外,还讨论了如何利用编程技巧优化这些模式。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

父文章 架构师之设计模式_个人渣记录仅为自己搜索用的博客-优快云博客

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

流程引擎更复杂的责任链

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值