Java设计模式-责任链

责任链模式(Chain Of Responsibility)指在数据对象存储前进行对此的限制处理,从而避免请求的发送者和接受者之间的耦合关系,责任链里的排列顺序类似于栈,数据对象经过责任链的一层层处理。用户的请求处理与响应处理的顺序是相反的。

建立用户请求和接收对象Request和Respon

package com.mby.dp.filter;

public class Request {
	String requestStr;

	public String getRequestStr() {
		return requestStr;
	}

	public void setRequestStr(String requestStr) {
		this.requestStr = requestStr;
	}
	
	
}

package com.mby.dp.filter;

public class Response {
	String responseStr;

	public String getResponseStr() {
		return responseStr;
	}

	public void setResponseStr(String responseStr) {
		this.responseStr = responseStr;
	}
	
}

Filter接口定义:

package com.mby.dp.filter;

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

定义责任链并实现Filter接口:

package com.mby.dp.filter;

import java.util.ArrayList;
import java.util.List;

public class FilterChain implements Filter {
	List<Filter> filters = new ArrayList<Filter>();
	int index = 0;
	
	public FilterChain addFilter(Filter f) {
		this.filters.add(f);
		return this;
	}

	@Override
	public void doFilter(Request request, Response response, FilterChain fc) {
		if(index == filters.size()) {
			return;
		}
		Filter f = filters.get(index);
		index++;
		f.doFilter(request, response, fc);
	}

}
定义2个处理限制:

package com.mby.dp.filter;

public class HTMLFilter implements Filter{

	@Override
	public void doFilter(Request request, Response response, FilterChain fc) {
		request.requestStr = request.requestStr.replace("<", "[")
				   								.replace(">", "]") + "----HTMLFilter----";
		fc.doFilter(request, response, fc);
		response.responseStr += "----HTMLFilter----";
	}

}


package com.mby.dp.filter;

public class SensitiveFilter implements Filter{

	@Override
	public void doFilter(Request request, Response response, FilterChain fc) {
		request.requestStr = request.requestStr.replace("敏感", "") + "----SensitiveFilter----";
		fc.doFilter(request, response, fc);
		response.responseStr += "----SensitiveFilter----";
	}

}


主方法:

package com.mby.dp.filter;

public class Test {

	public static void main(String[] args) {
		String s = "大家好:),<javascript>敏感,被就业";
		
		Request request = new Request();
		Response response = new Response();
		request.setRequestStr(s);
		response.setResponseStr(s);
		FilterChain fc = new FilterChain();
		fc.addFilter(new HTMLFilter())
			.addFilter(new SensitiveFilter());
		fc.doFilter(request, response, fc);
		System.out.println(request.getRequestStr());
		System.out.println(response.getResponseStr());
		
	}

}

输出结果:

大家好:),[javascript],被就业----HTMLFilter--------SensitiveFilter----
大家好:),<javascript>敏感,被就业----SensitiveFilter--------HTMLFilter----

注意输出结果顺序是:HTMLFilter--SensitiveFilter--SensitiveFilter--HTMLFilter

而不是:HTMLFilter--SensitiveFilter--HTMLFilter--SensitiveFilter


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值