자바 디자인 모델 의 책임 체인 모델-학습 노트 1

디자인 모델 의 책임 체인 모델(Chain of Responsibility)은 웹 프로젝트 에서 가장 자주 사용 하 는 디자인 모델 이다.예 를 들 어 Apache Tomcat 의 인 코딩 처리,Struts 2 의 차단기,jsp servlet 의 Filter 등 은 모두 책임 체인 모델 을 바탕 으로 디자인 된 것 이다.
 
다음은 WEB 가 요청 한 Request 를 보 내 는 것 을 직접 모 의 합 니 다.Request 는 두 개의 필터 체인 HTML Filter 필터 태그,SensitiveFilter 를 통 해 민감 한 어 휘 를 걸 러 내 고 필 터 를 거 친 후에 응답 대상 을 되 돌려 줍 니 다.
 
인 스 턴 스 코드:
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());
	}
}


좋은 웹페이지 즐겨찾기