责任链模式

余生长醉 提交于 2020-08-09 05:48:47

责任链模式(Chain of Responsibility Pattern)为请求创建了一个接收者对象的链。这种模式给予请求的类型,对请求的发送者和接收者进行解耦。这种类型的设计模式属于行为型模式。典型的责任链模式就是servlet的过滤器.下面是马士兵老师写的一段关于责任链模式的代码,写得很精髓 马士兵设计模式

public class Main_Servlet {
    public static void main(String[] args) {
        Request request = new Request();
        Response response = new Response();
        request.str = "大家好:) <script>,欢迎访问 mashibing.com 996";
        response.str = "response";
        FilterChain fc = new FilterChain();
        fc.add(new HtmlFilter()).add(new FaceFilter()).doFilter(request,response);
        System.out.println(request.str);
        System.out.println(response.str);
    }
}

class Msg{
    String msg;
}

class Request{
    String str;
}

class Response{
    String str;
}

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

class HtmlFilter implements Filter {
    @Override
    public void doFilter(Request request, Response response, FilterChain filterChain) {
        request.str = request.str.replace("<","[").replace(">","]");
        filterChain.doFilter(request,response);
        response.str = response.str + "--HtmlFilter";
    }
}

class FaceFilter implements Filter {
    @Override
    public void doFilter(Request request, Response response, FilterChain filterChain) {
        request.str = request.str.replace(":)","^v^");
        filterChain.doFilter(request,response);
        response.str = response.str + "--FaceFilter";
    }
}


class FilterChain {
    List<Filter> filters = new ArrayList<>();
    int index = 0;
    public FilterChain add(Filter filter){
        filters.add(filter);
        return this;
    }
    public void doFilter(Request request, Response response){
        if (index == filters.size()){
            return;
        }
        Filter f = filters.get(index);
        index ++;
        f.doFilter(request,response,this);
    }
}
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!