责任链模式-- chainResponsibility
2015-08-27 19:03
513 查看
责任链模式在Struts中用的很多。
代码:
1. 创建两个基本类
代码:
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
相关文章推荐
- hdu 5336 XYZ and Drops 2015 Multi-University Training Contest 4
- mount挂载失败。 mount failed reason given by server permission denied
- xxx 表 is marked as crashed and last (automatic?) repair 解决办法
- 分析rails日志,计算响应率
- 分析rails日志,计算响应率
- WebDriverException: Message: Failed to navigate to http://10.1.96.59:9080解决办法
- RAID简单概述
- BZOJ 题目3172: [Tjoi2013]单词(AC自动机||AC自动机+fail树||后缀数组暴力||后缀数组+RMQ+二分等五种姿势水过)
- 再谈应用环境下的TIME_WAIT和CLOSE_WAIT
- Keychain
- repo sync时出现contains uncommitted changes的错误提示
- 递推 ACdream1420 High Speed Trains
- 2013 Multi-University Training Contest 9(hdu 4686 - 4691)dp(好)+矩阵快速幂+一般图匹配带花树+后缀数组
- 再谈应用环境下的TIME_WAIT和CLOSE_WAIT
- AvailableAnnotations
- 解决 iBooks 无法显示 epub 电子书本身的 thumbnail
- Pair
- uva 10651 Pebble Solitaire
- org.artofsolving.jodconverter.office.OfficeException: failed to start and connect
- 浅谈层次化的AI架构