`

责任链模式

F# 
阅读更多

1、ServletResponse

package com.sunrex.design.pattern;

public class ServletResponse {

	public String responseStr() {
		return " response " + (ServletRequest.i--);
	}
}

 

2、ServletRequest

package com.sunrex.design.pattern;

public class ServletRequest {
	public static int i = 0;
	public String getAttribute(String str) {
		i++;
		return str + " + " + i;
	} 
}

 

 

3、Filter接口

package com.sunrex.design.pattern;

public interface Filter {
	public void doFilter(ServletRequest request, ServletResponse response,
			FilterChain chain);
}

 

 

4、FilterChain类

package com.sunrex.design.pattern;

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

public class FilterChain implements Filter {

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

 

 

5、HtmlFilter类

package com.sunrex.design.pattern;

public class HtmlFilter implements Filter {

	public void doFilter(ServletRequest request, ServletResponse response,
			FilterChain chain) {
		System.out.println("--HtmlFilter.start--"+ request.getAttribute("test"));
		chain.doFilter(request, response, chain);
		System.out.println("--HtmlFilter.end--" + response.responseStr());
	}

}

 

 

6、XMLFilter类

package com.sunrex.design.pattern;

public class XMLFilter implements Filter {

	public void doFilter(ServletRequest request, ServletResponse response,
			FilterChain chain) {
		System.out.println("  --XMLFilter.start--"+ request.getAttribute("test"));
		chain.doFilter(request, response, chain);
		System.out.println("  --XMLFilter.end--" + response.responseStr());
	}
}

 

 

7、JavascriptFilter类

package com.sunrex.design.pattern;

public class JavascriptFilter implements Filter {

	public void doFilter(ServletRequest request, ServletResponse response,
			FilterChain chain) {
		System.out.println("    --JavascriptFilter.start-- " + request.getAttribute("test"));
		chain.doFilter(request, response, chain);
		System.out.println("    --JavascriptFilter.end--" + response.responseStr());
	}

}

 

 

8、测试类-FilterTest类

package com.sunrex.design.pattern;

public class FilterTest {

	public static void main(String[] args) {
		FilterChain fc = new FilterChain();
		fc.addFilter(new HtmlFilter()).addFilter(new XMLFilter()).addFilter(new JavascriptFilter());
		ServletRequest request = new ServletRequest();
		ServletResponse response = new ServletResponse();
		
		fc.doFilter(request, response, fc);
	}

}

 

 

9、程序执行结果

--HtmlFilter.start--test + 1
  --XMLFilter.start--test + 2
    --JavascriptFilter.start-- test + 3
    --JavascriptFilter.end-- response 3
  --XMLFilter.end-- response 2
--HtmlFilter.end-- response 1

 

 

分享到:
评论

相关推荐

Global site tag (gtag.js) - Google Analytics