行为型模式--责任链(二)

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

处理流程图

这里写图片描述
具体处理流程参考责任链(一)
下面只是针对责任链(一)的改变

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());
	}

}

截图结果

这里写图片描述

总结

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

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值