`
wang吖
  • 浏览: 234619 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Java设计模式之责任链模式-学习笔记1

阅读更多

设计模式之责任链模式(Chain of Responsibility)是Web项目中最经常用到的一个设计模式,比如是Apache Tomcat 的对Encoding的 处理,Struts2 的拦截器, jsp servlet 的Filter 等等,都是基于责任链模式设计的。

 

下面直接来模拟WEB发送一个请求Request经过两个过滤链HTMLFilter过滤标签、SensitiveFilter过滤敏感词汇,经过过滤之后返回一个Response对象

 

实例代码:

public interface Filter {

	public void doFilter(Request req, Response rsp, FilterChain chain);
}


public class HTMLFilter implements Filter {

	@Override
	public void doFilter(Request req, Response rsp, FilterChain f) {
		req.request = req.request.replace("<html>", "[html]")
				+ "---HTMLFilter()";
		f.doFilter(req, rsp, f);
		rsp.response += "---HTMLFilter()";
	}

}



public class SensitiveFilter implements Filter {

	@Override
	public void doFilter(Request req, Response rsp, FilterChain f) {
		req.request = req.request.replace("很黄很暴力", "很xxx很xxx")
				+ "---SensitiveFilter()";
		f.doFilter(req, rsp, f);
		rsp.response += "---SensitiveFilter()";
	}

}




public class FilterChain implements Filter {

	private List<Filter> list = new ArrayList<Filter>();
	private int index;

	@Override
	public void doFilter(Request req, Response rsp, FilterChain chain) {
		if (index == list.size()) {
			return;
		}
		Filter f = list.get(index);
		index++;
		f.doFilter(req, rsp, chain);
	}

	public FilterChain addFilter(Filter f) {
		list.add(f);
		return this;
	}
}



public class Request {

	String request = "";

	public String getRequest() {
		return request;
	}

	public void setRequest(String request) {
		this.request = request;
	}
}




public class Response {

	String response = "";

	public String getResponse() {
		return response;
	}

	public void setResponse(String response) {
		this.response = response;
	}
}



public class Main {

	public static void main(String[] args) {
		String msg = "<html>很黄很暴力,天天开心";

		Request request = new Request();
		request.setRequest(msg);

		Response response = new Response();

		// FilterChain ch = new FilterChain();
		// ch.addFilter(new HTMLFilter()).addFilter(new SensitiveFilter());

		FilterChain ch = new FilterChain();
		ch.addFilter(new HTMLFilter());

		FilterChain ch2 = new FilterChain();
		ch2.addFilter(new SensitiveFilter());

		ch.addFilter(ch2);// 过滤链上加过滤链

		ch.doFilter(request, response, ch);

		System.out.println(request.getRequest());
		System.out.println(response.getResponse());
	}
}

 

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics