Chain of Responsibility(责任链模式)
来源:互联网 发布:2016中国近几年gdp数据 编辑:程序博客网 时间:2024/05/20 07:33
一,概述
责任链模式在tomcat里面的Filter和Struts里面的Interceptor都用到了这一模式,此模式的目标是使多个对象都有机会处理请求,从而避免请求的发送者和接收者之间的耦合关系。将这些对象连成一条链,并沿着这条链传递请求,直到有一个对象处理它为止。
二,实现责任链模式实例代码,在以下实例代码中FilterChian类里面的addFilter和doFilter方法是实现这模式的关键,请认真领会。
(1)Request类
package com.sihang.cor;public class Request {private String requestStr;public String getRequestStr() {return requestStr;}public void setRequestStr(String requestStr) {this.requestStr = requestStr;}}
(2)Response类
package com.sihang.cor;public class Response {private String responseStr;public String getResponseStr() {return responseStr;}public void setResponseStr(String responseStr) {this.responseStr = responseStr;}}
(3)Filter接口
package com.sihang.cor;public interface Filter {public void doFilter(Request request,Response response,FilterChain chain);}
(4)FilterChain类,实现Filter接口package com.sihang.cor;import java.util.ArrayList;import java.util.List;public class FilterChain implements Filter {List<Filter> filters = new ArrayList<Filter> ();private int index =0;public FilterChain addFilter(Filter filter){this.filters.add(filter);return this;}@Overridepublic void doFilter(Request request, Response response, FilterChain chain) {if(index == filters.size())return;Filter filter = filters.get(index);index++;filter.doFilter(request, response, chain);}}
(5)多个自己定义的Filterpackage com.sihang.cor;public class HtmlFilter implements Filter {@Overridepublic void doFilter(Request request, Response response, FilterChain chain) {request.setRequestStr(request.getRequestStr().replace("Html_start", "XML_start"));chain.doFilter(request, response, chain);response.setResponseStr(response.getResponseStr().replace("Html_end", "XML_end"));}}
package com.sihang.cor;public class JSFilter implements Filter {@Overridepublic void doFilter(Request request, Response response, FilterChain chain) {request.setRequestStr(request.getRequestStr().replace("javascript_start","TXT_start"));chain.doFilter(request, response, chain);response.setResponseStr(response.getResponseStr().replace("javascript_end", "TXT_end"));}}
package com.sihang.cor;public class SensitiveFilter implements Filter{@Overridepublic void doFilter(Request request, Response response, FilterChain chain) {request.setRequestStr(request.getRequestStr().replace("sensitive_start", "harmonious_start"));chain.doFilter(request, response, chain);response.setResponseStr(response.getResponseStr().replace("sensitive_end", "harmonious_end"));}}
package com.sihang.cor;public class MainTest {public static void main(String[]args){Request request = new Request();request.setRequestStr("javascript_start---Html_start----sensitive_start");Response response = new Response();response.setResponseStr("javascript_end----Html_end----sensitive_end");FilterChain chain = new FilterChain();chain.addFilter(new HtmlFilter());chain.addFilter(new SensitiveFilter());chain.addFilter(new JSFilter());chain.doFilter(request, response, chain);System.out.println(request.getRequestStr());System.out.println(response.getResponseStr());}}
- 责任链(Chain of Responsibility)模式
- 责任链模式(Chain of Responsibility Pattern)
- 责任链模式(Chain of Responsibility Pattern)
- Chain of Responsibility 责任链模式
- 责任链模式 chain of responsibility
- 责任链模式(chain of responsibility)
- 责任链模式(Chain of Responsibility)
- 责任链模式(Chain of Responsibility)
- 责任链模式【CHAIN OF RESPONSIBILITY PATTERN 】
- 责任链模式【Chain of Responsibility Pattern】
- Chain of Responsibility -- 责任链模式
- 责任链模式(Chain of Responsibility Pattern)
- 责任链(chain of responsibility)模式
- Chain of Responsibility(责任链模式)
- 责任链模式(Chain of Responsibility Pattern)
- 责任链模式(Chain of Responsibility)
- Java责任链模式(Chain of Responsibility)
- 责任链模式【Chain of Responsibility Pattern】
- 二维数组的动态使用(记录)(附上一段自己的代码)
- FMQ数据交换平台
- RFC3080 - The Blocks Extensible Exchange Protocol Core
- DC/DC模块的电源纹波测量
- Qt内建(built-in)对话框
- Chain of Responsibility(责任链模式)
- 如何让自己内心变的强大
- Android Studio 启动不了
- RFC3149 - MGCP Business Phone Packages
- RFC3117 - On the Design of Application Protocols
- NP问题
- Mysql异常之Access denied for user 'root'@'localhost' (using password: NO/YES)
- Error: debugging information for 'myproject.exe' cannot be found or does not match. No symbols loade
- Surfaceflinger process流程分析