现在的位置: 首页 > 综合 > 正文

设计模式之责任链模式

2018年05月20日 ⁄ 综合 ⁄ 共 2661字 ⁄ 字号 评论关闭

1:责任链模式概述

   《设计模式》中给它的定义如下:使多个对象都有机会处理请求,从而避免请求的发送者和接收者之间的耦合关系,将这些对象连成一条链,并沿着这条链来传递请求,直到有一个对象处理它为止。

   从定义上可以看出,责任链模式的提出是为了“解耦”,以应变系统需求的变更和不明确性。

2:代码实现部分

    2.1 Request类  代表一个请求类

        

package com.bjsxt.filter;

public class Request {
	
	private String requestStr;

	public String getRequestStr() {
		return requestStr;
	}

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

  

     2.2 Response类  代表一个回复类

     

package com.bjsxt.filter;

public class Response {

	private String responseStr;

	public String getResponseStr() {
		return responseStr;
	}

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

   2.3 Filter接口  代表一个请求处理接口

   

package com.bjsxt.filter;

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

   2.4 HTMLFilter类  代表一个HTML的请求处理类

     

package com.bjsxt.filter;

public class HTMLFilter implements Filter {

	@Override
	public void doFilter(Request request, Response response, FilterChain chain) {
		String requestStr = request.getRequestStr();
		requestStr += "---HTMLFilter()";
		request.setRequestStr(requestStr);
		
		chain.doFilter(request, response, chain);
		
		String responseStr = response.getResponseStr();
		responseStr += "--HTMLFilterResponse";
		response.setResponseStr(responseStr);
		
	}

}

2.5 SesitiveFilter类  代表另外一个请求的处理类

   

package com.bjsxt.filter;

public class SesitiveFilter implements Filter {

	@Override
	public void doFilter(Request request, Response response, FilterChain chain) {
		String requestStr = request.getRequestStr();
		requestStr += "---SesitiveFilter()";
		request.setRequestStr(requestStr);
		
		chain.doFilter(request, response, chain);
		
		String responseStr = response.getResponseStr();
		responseStr += "--SesitiveFilterResponse";
		response.setResponseStr(responseStr);
		
	}

}

2.6 FilterChain类  代表一个Filter的链式容器类

     

package com.bjsxt.filter;

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

public class FilterChain implements Filter {

	private List<Filter> filters = new ArrayList<Filter>();
	
	private int index = 0;
	
	public FilterChain addFilter(Filter filter) {
		this.filters.add(filter);
		return this;
	}
	
	@Override
	public void doFilter(Request request, Response response, FilterChain chain) {
		
		if(index == filters.size()) {
			return ;
		}
		
		Filter filter = filters.get(this.index);
		this.index++;
		filter.doFilter(request, response, chain);
		
	}

}

2.7 Main类 测试类

  

package com.bjsxt.filter;

public class Main {

	public static void main(String[] args) {
		Request request = new Request();
		request.setRequestStr("request");
		
		Response response = new Response();
		response.setResponseStr("response");
		
		FilterChain chain = new FilterChain();
		chain.addFilter(new HTMLFilter()).addFilter(new SesitiveFilter());
		
		chain.doFilter(request, response, chain);
		
		System.out.println(request.getRequestStr());
		System.out.println(response.getResponseStr());
		
	}

}

2.8 输出结果

     request---HTMLFilter()---SesitiveFilter()
     response--SesitiveFilterResponse--HTMLFilterResponse

            

抱歉!评论已关闭.