过滤器模式

本贴最后更新于 1501 天前,其中的信息可能已经水流花落

解释

过滤器模式有两大特点:

  • 自由组合过滤器
  • 递归

过滤器模式的的最常见的一个例子就是 servlet 中的过滤器,我在实现自己的 aop 功能时,发现 环绕织入 不太好解决,使用过滤器模式的 递归 特点刚好能够解决这个问题

使用要点

  • 定义 Filter
  • 定义 FilterChain
    • 持有 Filter 列表
    • 持有一个计数器,用于标志在递归的过程中什么时候该返回

类图

image.png

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;
    }
}
  • Java

    Java 是一种可以撰写跨平台应用软件的面向对象的程序设计语言,是由 Sun Microsystems 公司于 1995 年 5 月推出的。Java 技术具有卓越的通用性、高效性、平台移植性和安全性。

    3167 引用 • 8207 回帖

相关帖子

欢迎来到这里!

我们正在构建一个小众社区,大家在这里相互信任,以平等 • 自由 • 奔放的价值观进行分享交流。最终,希望大家能够找到与自己志同道合的伙伴,共同成长。

注册 关于
请输入回帖内容 ...