java设计模式--责任链(二)

这里模仿的类似于Servlet里面的filter或者Struts2里面的拦截器实现原理

处理流程图

java设计模式--责任链(二)_第1张图片
具体处理流程参考责任链(一)
下面只是针对责任链(一)的改变

Filter接口

package com.hfview.designMode.zerenlian.web;

public interface Filter {
    String doFilter(Request req,Response res,FilterChain chain);
}

脚本处理实现类

package com.hfview.designMode.zerenlian.web;

public class HTMLFilter implements Filter {

    public String doFilter(Request req, Response res,FilterChain chain) {

                System.out.println("开始处理HTMLFilter 的request请求");
                req.setStr(req.getStr().replace('<', '[')
                           .replace('>', ']'));
                String result = chain.doFilter(req, res, chain);

                System.out.println("开始处理HTMLFilter 的Response请求");
                res.setStr(res.getStr()+"HTMLFilter");

                return result;
    }

}

敏感字符处理类

package com.hfview.designMode.zerenlian.web;

public class SesitiveFilter implements Filter {

    public String doFilter(Request req, Response res,FilterChain chain) {

        System.out.println("开始处理SesitiveFilter 的request请求");
        req.setStr(req.getStr().replace("被就业", "就业")
             .replace("敏感", ""));

        String result = chain.doFilter(req, res, chain);

        System.out.println("开始处理SesitiveFilter 的Response请求");
        res.setStr(res.getStr()+"SesitiveFilter");

        return result;
    }

}

FilterChain

package com.hfview.designMode.zerenlian.web;

import java.util.LinkedList;

public class FilterChain implements Filter {

    static LinkedList<Filter> filters =new LinkedList<Filter>();

    public FilterChain addFilter(Filter f) {
        filters.addLast(f);
        return this;
    }

    public String doFilter(Request req, Response res,FilterChain chain) {
        Filter f= filters.pollFirst();
        if(f!=null){
            return f.doFilter(req, res,chain);
        }else{
            return "success";
        }
    }
}

参数 请求:Request

package com.hfview.designMode.zerenlian.web;

public class Request {
    private String str;

    public String getStr() {
        return str;
    }

    public void setStr(String str) {
        this.str = str;
    }


}

参数 请求:Response

package com.hfview.designMode.zerenlian.web;

public class Response {

    private String str;

    public String getStr() {
        return str;
    }

    public void setStr(String str) {
        this.str = str;
    }
}

测试类

package com.hfview.designMode.zerenlian.web;

public class Main {

    /** * @param args */
    public static void main(String[] args) {
        String msg = "大家好:),<script>,敏感,被就业,网络授课没感觉,因为看不见大家伙儿";
        Response res =new Response();
        res.setStr("123");

        Request req =new Request();
        req.setStr(msg);

        FilterChain fc = new FilterChain();
        fc.addFilter(new HTMLFilter()).addFilter(new SesitiveFilter());

        fc.doFilter(req, res,fc);
        System.out.println(req.getStr());

        System.out.println(res.getStr());
    }

}

截图结果

java设计模式--责任链(二)_第2张图片

总结

这里其中就是利用LinkedList和递归调用 来模拟堆栈的过程,如果不清晰可以断点调试来观察

你可能感兴趣的:(java,设计模式,责任链)