职责链模式例子

Posted yehuabin

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了职责链模式例子相关的知识,希望对你有一定的参考价值。

 

public interface Filter {
    void doFilter(Request request,Response response,FilterChain fc);
}

 

public class FirstFilter implements Filter {

    @Override
    public void doFilter(Request request, Response response,FilterChain fc) {
        request.requestStr+="---FirstFilter";
        fc.doFilter(request, response, fc);
        response.responseStr+="---FirstFilter";
    }
}

 

public class SecondFilter implements Filter {

    @Override
    public void doFilter(Request request, Response response,FilterChain fc) {
        request.requestStr+="---SecondFilter";
        fc.doFilter(request, response, fc);
        response.responseStr+="---SecondFilter";
    }
}

 

 

public class FilterChain implements Filter {
    List<Filter> list = new ArrayList<Filter>();
    int index = 0;

    public void putChain(Filter filter) {
        list.add(filter);
    }

    @Override
    public void doFilter(Request request, Response response, FilterChain fc) {
        if (index == list.size())
            return;

        Filter filter = list.get(index);
        index++;
        filter.doFilter(request, response, fc);
    }
}

 

 

public class Request {
    public String requestStr="request:";
}

 

public class Response {
    public String responseStr="response:";
}

 

 

public static void main(String[] args) {
         
        Request request=new Request();
        Response response=new Response();
        FilterChain fc=new FilterChain();
        SecondFilter f2=new SecondFilter();
        FirstFilter f1=new FirstFilter();
        fc.putChain(f1);
        fc.putChain(f2);
        fc.doFilter(request, response,fc);
        System.out.println(request.requestStr);
        System.out.println(response.responseStr);
    }

 

输出结果如下:

request:---FirstFilter---SecondFilter
response:---SecondFilter---FirstFilter

 

以上是关于职责链模式例子的主要内容,如果未能解决你的问题,请参考以下文章

javascript设计模式——职责链模式

JavaScript实现职责链模式

大战设计模式18—— 职责链模式

(十五)职责链模式-代码实现

C++实现职责链模式

Java中职责链的泛化使用