首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 网络技术 > 网络基础 >

设计形式之责任链(Chain of Responsibility)模式

2012-10-09 
设计模式之责任链(Chain of Responsibility)模式Java Web中的Filter(包括struts2中的过滤器)就是典型的责

设计模式之责任链(Chain of Responsibility)模式
Java Web中的Filter(包括struts2中的过滤器)就是典型的责任链模式,看了以下的代码,就大概能知道Filter是怎么个实现的了:

public class Request {
String requestStr;

public String getRequestStr() {
   return requestStr;
}

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

public class Response {
String responseStr;

public String getResponseStr() {
   return responseStr;
}

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

}

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

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

public FilterChain addFilter(Filter f) {
   this.filters.add(f);
   return this;
}

@Override
public void doFilter(Request request, Response response, FilterChain chain) {
   if(index == filters.size()) return ;
 
   Filter f = filters.get(index);
   index ++;
   f.doFilter(request, response, chain);
}
}

public class HTMLFilter implements Filter {


@Override
public void doFilter(Request request, Response response, FilterChain chain) {
   //process the html tag <>
   request.requestStr = request.requestStr.replace('<', '[')
       .replace('>', ']') + "---HTMLFilter()";
   chain.doFilter(request, response, chain);
   response.responseStr += "---HTMLFilter()";
}

}

public class SesitiveFilter implements Filter {


@Override
public void doFilter(Request request, Response response, FilterChain chain) {
   request.requestStr = request.requestStr.replace("被就业", "就业")
   .replace("敏感", "") + "---SesitiveFilter()";
   chain.doFilter(request, response, chain);
   response.responseStr += "---SesitiveFilter()";

}

}

public class Main {

/**
* @param args
*/
public static void main(String[] args) {
   String msg = "大家好:),<script>,敏感,被就业,网络授课没感觉,因为看不见大家伙儿";
   Request request = new Request();
   request.setRequestStr(msg);
   Response response = new Response();
   response.setResponseStr("response");
   FilterChain fc = new FilterChain();
   fc.addFilter(new HTMLFilter())
    .addFilter(new SesitiveFilter())
    ;
 
   fc.doFilter(request, response, fc);
   System.out.println(request.getRequestStr());
   System.out.println(response.getResponseStr());
}

}

热点排行
Bad Request.