当前位置:首页 > 开发 > 编程语言 > 设计模式 > 正文

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

发表于: 2014-05-24   作者:wang吖   来源:转载   浏览:
摘要: 设计模式之责任链模式(Chain of Responsibility)是Web项目中最经常用到的一个设计模式,比如是Apache Tomcat 的对Encoding的 处理,Struts2 的拦截器, jsp servlet 的Filter 等等,都是基于责任链模式设计的。   下面直接来模拟WEB发送一个请求Request经过两个过滤链HTMLFilter过滤标签、Sensitiv

设计模式之责任链模式(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());
	}
}

 

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

  • 0

    开心

    开心

  • 0

    板砖

    板砖

  • 0

    感动

    感动

  • 0

    有用

    有用

  • 0

    疑问

    疑问

  • 0

    难过

    难过

  • 0

    无聊

    无聊

  • 0

    震惊

    震惊

编辑推荐
 责任链模式是一种对象的行为模式。在责任链模式里,很多对象由每一个对象对其下家的引用而连接起
 责任链模式是一种对象的行为模式。在责任链模式里,很多对象由每一个对象对其下家的引用而连接起
责任链模式:多个对象由其对象对应下家的引用连成一条链,请求在这个链上传递,直到链上的某一个接
本文继续介绍 23种设计模式系列 之职责链模式。 什么是链 1、链是一系列节点的集合。 2.、链的各节
Java设计模式之责任链 摘要:本笔记主要记录了责任链设计模式的设计、从问题的提出、到问绕解决问题
从击鼓传花谈起   击鼓传花是一种热闹而又紧张的饮酒游戏。在酒宴上宾客依次坐定位置,由一人击鼓
责任链(Chain of Responsibility)模式:责任链模式是对象的行为模式。使多个对象都有机会处理请求
责任链(Chain of Responsibility)模式:责任链模式是对象的行为模式。使多个对象都有机会处理请求
责任链(Chain of Responsibility)模式:责任链模式是对象的行为模式。使多个对象都有机会处理请求
转载请注明出处:http://blog.csdn.net/l1028386804/article/details/45569099 一、概述 使多个对象
版权所有 IT知识库 CopyRight © 2009-2015 IT知识库 IT610.com , All Rights Reserved. 京ICP备09083238号