责任链模式(过滤器、拦截器都可以使用链模式)

212 阅读1分钟

定义接口 Filter_

public interface Filter_ {
    void doFilter(MyFilterChain chain);
}

定义接口实现类 MyFilter1

public class MyFilter1 implements Filter_ {
    public void doFilter(MyFilterChain chain) {
        System.out.println("过滤IP开始。。。。。");
        chain.doFilter();
        System.out.println("过滤IP结束。。。。。");
    }
}

定义接口实现 MyFilter2

public class MyFilter2 implements Filter_ {
    public void doFilter(MyFilterChain chain) {
        System.out.println("过滤敏感词开始。。。。。");
        chain.doFilter();
        System.out.println("过滤敏感词结束。。。。。");
    }
}

定义接口 FilterChain

public interface FilterChain {
    void doFilter();
}

定义过滤器链实现类 MyFilterChain

public class MyFilterChain implements FilterChain {
    LinkedList chanList = new LinkedList();
    int index = 0;
    public MyFilterChain add(Filter_ filter) {
        chanList.add(filter);
        return this;
    }    
    public void doFilter() {
        if (index == chanList.size()) {
            return;
        }        
    Filter_ f = (Filter_) chanList.get(index);
        index++;
        f.doFilter(this);
    }
}

测试类 Test

/**
 * 责任链模式(过滤器、拦截器都可以使用链模式)
 */
public class Test {
    public static void main(String[] args) {
        MyFilterChain chain = new MyFilterChain();
        chain.add(new MyFilter1()).add(new MyFilter2());
        chain.doFilter();
    }
}