您的位置:首页 > 其它

设计模式之责任链模式

2013-08-05 10:08 393 查看
责任链模式 ---在java的过滤器拦截器的核心模式

1.模拟Response和Request两个 类

public class Request {
private String requestMsg;

public String getRequestMsg() {
return requestMsg;
}

public void setRequestMsg(String requestMsg) {
this.requestMsg = requestMsg;
}

}

public class Response {
private String responseMsg;

public String getResponseMsg() {
return responseMsg;
}

public void setResponseMsg(String responseMsg) {
this.responseMsg = responseMsg;
}

}


2.两个接口,FIlter和FilterChain接口

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

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

3.两个实现Filter的类,HtmlFilter和SensitiveFilter ---  一个实现FilterChian的接口的类DefaultChain

public class HtmlFilter implements Filter {

@Override
public void doFilter(Request request, Response response,FilterChain filterChain) {
String requestMsg = request.getRequestMsg();
request.setRequestMsg(requestMsg.replaceAll("<","[").replaceAll(">","]"));

filterChain.doFilter(request, response);

String responseMsg = response.getResponseMsg();
response.setResponseMsg(responseMsg+"HtmlFilter处理过----");
}

}
public class SensitiveFilter implements Filter {

@Override
public void doFilter(Request request, Response response,FilterChain filterChain) {
String requestMsg = request.getRequestMsg();
request.setRequestMsg(requestMsg.replaceAll("被就业","就业").replaceAll("你妹","妹妹"));

filterChain.doFilter(request, response);

String responseMsg = response.getResponseMsg();
response.setResponseMsg(responseMsg+"SensitiveFilter处理过----");
}

}

public class DefaultFilterChain implements FilterChain {
private List<Filter> filterList = new ArrayList<Filter>();
private int index = 0;

public DefaultFilterChain addFilter(Filter filter){
this.filterList.add(filter);
return this;
}

@Override
public void doFilter(Request request, Response response) {
if(index == this.filterList.size()){
return;
}
Filter filter = this.filterList.get(index);
index++;
filter.doFilter(request, response, this);
}

}


4.测试打印结果:
public class Main {
public static void main(String[] args) {
Request request = new Request();
request.setRequestMsg("没事做,学学设计模式,<script><css+div>,被就业,你妹的");
Response response = new Response();
response.setResponseMsg("测试response。。。。");

DefaultFilterChain defaultFilterChain = new DefaultFilterChain();

Filter htmlFilter = new HtmlFilter();
Filter sensitiveFilter = new SensitiveFilter();
//FilterChain添加 Filter
defaultFilterChain.addFilter(htmlFilter).addFilter(sensitiveFilter);
//执行拦截器---
defaultFilterChain.doFilter(request, response);

System.out.println(request.getRequestMsg());
System.out.println(response.getResponseMsg());
}
}

打印结果:
没事做,学学设计模式,[script][css+div],就业,妹妹的

测试response。。。。SensitiveFilter处理过----HtmlFilter处理过----
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  设计模式 Filter