Chain of Responsibility责任链
Chain of Responsibility 责任链

责任链模式,举个例子就是servlet的Filter和FilterChain,泛型为Filter的list作为FilterChain的成员变量。相当于责任链上的每一个节点,每个过滤器都承担自己的责任,在FilterChain执行doFilter后过滤信息或者请求。
public class Cor {public static void main(String[] args){Request request = new Request();request.str = "AABB";Response response = new Response();response.str = "response";FilterPart1 filterPart1 = new FilterPart1();FilterPart2 filterPart2 = new FilterPart2();FilterChain filterChain = new FilterChain();filterChain.add(filterPart1).add(filterPart2);filterChain.doFilter(request,response);System.out.println(request.str);System.out.println(response.str);}}interface Filter{void doFilter(Request req,Response res,FilterChain filterChain);}class Request{String str;}class Response{String str;}class FilterPart1 implements Filter{@Overridepublic void doFilter(Request req, Response res, FilterChain filterChain) {req.str = req.str.replace('A','X');filterChain.doFilter(req,res);res.str+="FilterPart1";}}class FilterPart2 implements Filter{@Overridepublic void doFilter(Request req, Response res, FilterChain filterChain) {req.str = req.str.replace('B','Z');filterChain.doFilter(req,res);res.str+="FilterPart2";}}class FilterChain{ArrayList<Filter> filters = new ArrayList<>();int index;public FilterChain add(Filter filter){filters.add(filter);return this;}public void doFilter(Request req,Response res){if(index<filters.size()){filters.get(index++).doFilter(req,res,this);}}}
