解释
过滤器模式有两大特点:
- 自由组合过滤器
- 递归
过滤器模式的的最常见的一个例子就是 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;
}
}
欢迎来到这里!
我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。
注册 关于