浅谈23中设计模式--------1.责任链模式

责任链设计模式(Chain of Responsibility)定义:使多个对象都有机会处理请求,从而避免请求的发送者和接受者之间的耦合关系, 将这个对象连成一条链,并沿着这条链传递该请求,直到有一个对象处理他为止。 

应用有:Java Web中的过滤器链、springmvc中的拦截器链,Struts2中的拦截器栈等。

下面就运用责任链设计模式来模拟客户端------服务器端的request,response过程中拦截处理过程:

问题:给定字符串 Steing mes="小谢,来自云南腾冲,自称是个傻叉,非常的<,>{},优秀";

要求在request请求时候,要求先修改其中符号“{”为“^^^”,在修改其中“傻叉”为“天才”;

       在response时,反过来,先替换“傻叉”为“天才一个”再修改符号;形成一个闭环链,如若要添加其他修改,只要添加一个修改链就行。

直接上代码:

先定义一个filter接口,

/**
 * 可以定义一系列的规则
 * @author lenovo
 *
 */
public interface Filter {

	void doFilter(Request request,Response reponse,FilterChain chain);
}

然后定义一个request和一个response:

package com.jiang;

public class Request {

	String requestStr;

	public String getRequestStr() {
		return requestStr;
	}

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

public class Response {

	String responseStr;

	public String getResponseStr() {
		return responseStr;
	}

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

然后定义一个FilterChain 实现Filter,用于控制拦截逻辑,也是责任链模式的最重要体现:

package com.jiang;

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 chain) {
		if(index==filters.size())
			return;
		Filter f=filters.get(index);
		index++;
		f.doFilter(request, response, chain);
	}
}

然后定义修改字符串的一个类StringFilter实现Filter接口,定义一个修改符号的类HTMLFilter实现Filter接口:

package com.jiang;

public class StringFilter implements Filter{

	@Override
	public void doFilter(Request request, Response response,FilterChain chain) {
		request.requestStr=request.requestStr.replace("傻叉", "天才")+"StringFilter----";
		chain.doFilter(request, response, chain);
		response.responseStr=response.responseStr.replace("傻叉", "天才一个response");
	}

	
}
package com.jiang;

public class HTMLFilter implements Filter{

	@Override
	public void doFilter(Request request, Response response,FilterChain chain) {

		request.requestStr=request.requestStr.replace(">", "]")+"HTML----";
		chain.doFilter(request, response, chain);
		response.responseStr=response.responseStr.replace("{", "^^^response");
	}

	

}

最后测试类:

package com.jiang;

public class MainTest {

	public static void main(String[] args) {
		String mes="小谢,来自云南腾冲,自称是个傻叉,非常的<,>{},优秀";
		Request request=new Request();
		request.setRequestStr(mes);
		Response response=new Response();
		response.setResponseStr(request.getRequestStr());
		FilterChain fc=new FilterChain();
		
		fc.addFilter(new HTMLFilter()).addFilter(new StringFilter());
		//FilterChain  fc2=new FilterChain();
		//fc2.addFilter(new StringFilter());
		fc.doFilter(request, response,fc);
		System.out.println(request.getRequestStr());
		System.out.println(response.getResponseStr());
	}
}

猜你喜欢

转载自blog.csdn.net/weixin_41524017/article/details/81609818