什么是拦截过滤器模式(Intercepting Filter)?

53 阅读1分钟

世界上并没有完美的程序,但是我们并不因此而沮丧,因为写程序就是一个不断追求完美的过程。

  1. 意图
    请求过滤,过滤器+职责链
  2. 类图
    在这里插入图片描述
  3. 实例
	interface Filter {
        /**
         * 过滤
         * @param request
         */
        void filter (String request);
    }

    static class AuthFilter implements Filter {

        @Override
        public void filter(String request) {
            System.out.println("auth filter " + request);
        }
    }

    static class DebugFilter implements Filter {
        @Override
        public void filter(String request) {
            System.out.println("debug filter " + request);
        }
    }

    static class Target {
        public void exe (String request) {
            System.out.println("execute request " + request);
        }
    }

    static class FilterChain {
        private List<Filter> filterChain;
        private Target target;

        public FilterChain () {
            filterChain = new ArrayList<>(16);
            target = new Target();
        }

        public void addFilter (Filter filter) {
            filterChain.add(filter);
        }

        public void doIt (String request) {
            filterChain.forEach(filter -> filter.filter(request));
            target.exe(request);
        }
    
  1. 测试
public static void main(String[] args) {
        FilterChain filterChain = new FilterChain();
        filterChain.addFilter(new AuthFilter());
        filterChain.addFilter(new DebugFilter());

        filterChain.doIt("myRequest");
    }

运行结果:

auth filter myRequest
debug filter myRequest
execute request myRequest

想看更多吗?请访问:设计模式