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
分享到:
相关推荐
设计模式之责任链模式源码 设计模式之责任链模式源码 设计模式之责任链模式源码
spring责任链模式详解,包含项目中应用
一、责任链模式 现有 “战士”、“班长”、“排长”、“连长”,“营长”五种角色,当有人要请假时要进行以下处理 1.只能是下级象上级请假(如“排长”只能向“连长请假”) 2.班长可以批准1天内的假期,排长批5天,...
职责链模式 设计模式 Chain of Responsibility 若有问题望指出。
责任链模式代码
开始击鼓时,花束就开始依次传递,鼓声一落,如果花束在某人手中,则该人就得饮酒,这是很典型的行为责任链模式。 State模式主要解决的是在开发中时常遇到的根据不同的状态需要进行不同的处理操作的问题,而这样的...
责任链模式(Chain of Responsibility)的目标是使多个对象都有机会处理请求,从而避免请求的发送者和接收者之间的耦合关系。将这些对象连成一条链,并沿着这条链传递请求,直到有一个对象处理它为止。 在处理用户的...
责任链模式demo
C# 职责链模式 代码 模型代码,学习。
责任链模式的小例子
【设计模式】之责任链模式责任链模式概念责任链,顾名思义,就是用来处理相关事务责任的一条执行链,执行链上有多个节点,每个节点都有机会(条件匹配)处理请求事务,如果
设计模式的责任链模式的例子,希望对大家有用~~~~~~~~
责任链模式小demo
责任链模式 C++ 实现
设计模式之责任链模式Java版本实现和UML类图设计
ios平台中通过最简单的代码讲解责任链模式,可在博客http://blog.sina.com.cn/s/blog_161d504630102wxis.html中查看简单解释
JAVA 设计模式: 工厂模式 代理模式 迭代模式 责任链模式 源码
设计模式之责任链模式,使用形象化例子来解释说明。
设计模式C++学习之责任链模式(Chain of Responsibility)