您的位置:首页 > 大数据 > 人工智能

责任链模式-- chainResponsibility

2015-08-27 19:03 513 查看
责任链模式在Struts中用的很多。

代码:

  1. 创建两个基本类  

package pr.cgl.chainResponsibility;

/**
* Created by LL on 2015/8/27.
*/
public class Request {
public String requestStr;

public String getRequestStr() {
return requestStr;
}

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

package pr.cgl.chainResponsibility;

/**
* Created by LL on 2015/8/27.
*/
public class Response {
public String responseStr;

public String getResponseStr() {
return responseStr;
}

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

2. 创建Filter接口

package pr.cgl.chainResponsibility;

/**
* Created by LL on 2015/8/27.
*/
public interface Filter {
void doFilter(Request request, Response response, FilterChain fc);
}
3. 创建Filter接口的实现类  

package pr.cgl.chainResponsibility;

/**
* Created by LL on 2015/8/27.
*/
public class HTMLFilter implements Filter {

@Override
public void doFilter(Request request, Response response, FilterChain fc) {
request.requestStr += "--HTMLFilter";
fc.doFilter(request, response, fc);
response.responseStr += "--HTMLFilter";
}
}

package pr.cgl.chainResponsibility;
/**
* Created by LL on 2015/8/27.
*/
public class SensitiveFilter implements Filter {

@Override
public void doFilter(Request request, Response response, FilterChain fc) {
request.requestStr += "--SensitiveFilter";
fc.doFilter(request, response, fc);
response.responseStr += "--SensitiveFilter";
}
}

4. 创建过滤器链FilterChain

package pr.cgl.chainResponsibility;

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

/**
* Created by LL on 2015/8/27.
*/
public class FilterChain implements Filter {

List<Filter> filters = new ArrayList<Filter>();
int i = 0;

public List<Filter> getFilters() {
return filters;
}

public void setFilters(List<Filter> filters) {
this.filters = filters;
}

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

@Override
public void doFilter(Request request, Response response, FilterChain fc) {
if(i == filters.size()) return;
Filter filter = filters.get(i);
i++;
filter.doFilter(request, response, fc);
}
}
红色部分是责任链的关键。
5.测试
  

package pr.cgl.chainResponsibility;

/**
* Created by LL on 2015/8/27.
*/
public class Test1 {
public static void main(String[] args) {
Request request = new Request();
request.setRequestStr("cgl and xf ");
Response response = new Response();
response.setResponseStr("xf and response");
HTMLFilter htmlFilter = new HTMLFilter();
SensitiveFilter sensitiveFilter = new SensitiveFilter();
FilterChain fc = new FilterChain();
fc.addFilter(htmlFilter).addFilter(sensitiveFilter);
fc.doFilter(request, response, fc);
System.out.println(request.getRequestStr());
System.out.println(response.getResponseStr());
}
}
输出:
  cgl and xf --HTMLFilter--SensitiveFilter
  xf and response--SensitiveFilter--HTMLFilter
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: