解释
过滤器模式有两大特点:
- 自由组合过滤器
- 递归
过滤器模式的的最常见的一个例子就是 servlet 中的过滤器,我在实现自己的 aop 功能时,发现 环绕织入
不太好解决,使用过滤器模式的 递归
特点刚好能够解决这个问题
使用要点
- 定义 Filter
- 定义 FilterChain
- 持有 Filter 列表
- 持有一个计数器,用于标志在递归的过程中什么时候该返回
类图
Code
FilterChain
public class FilterChain { private List<Filter> filterList; private int index; public FilterChain(List<Filter> filterList) { this.filterList = filterList; } public Object execute() { if (index >= filterList.size()) { System.out.println("处理完毕"); return null; } return filterList.get(index++).doFilter(this); } public static void main(String[] args) { List<Filter> filters = new ArrayList<>(2); filters.add(new FilterA()); filters.add(new FilterB()); Object execute = new FilterChain(filters).execute(); } }
Filter
public interface Filter { Object doFilter(FilterChain filterChain); }
Filter 实现类
public class FilterA implements Filter { @Override public Object doFilter(FilterChain filterChain) { System.out.println("A处理前"); Object result = filterChain.execute(); System.out.println("A处理后"); return result; } } public class FilterB implements Filter { @Override public Object doFilter(FilterChain filterChain) { System.out.println("B处理前"); Object result = filterChain.execute(); System.out.println("B处理后"); return result; } }
欢迎来到这里!
我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。
注册 关于