java设计模式(二):2.3责任链(返回链)
来源:互联网 发布:英雄382美工钢笔 编辑:程序博客网 时间:2024/05/24 00:07
例子:模拟实现java web过滤器
工程目录结构与执行原理:
1.Request.java请求类
package web;public class Request {private String requestStr;public String getRequestStr() {return requestStr;}public void setRequestStr(String requestStr) {this.requestStr = requestStr;}}
2.Response.java响应类
package web;public class Response {private String responseStr;public String getResponseStr() {return responseStr;}public void setResponseStr(String responseStr) {this.responseStr = responseStr;}}
3.Filter.java过滤器接口类
package filter;import web.Request;import web.Response;public interface Filter {public void doFilter(Request request,Response response,FilterChain chain);}
4.Filter1.java过滤器实现类
package filter.impl;import web.Request;import web.Response;import filter.Filter;import filter.FilterChain;public class Filter1 implements Filter{@Overridepublic void doFilter(Request request,Response response,FilterChain chain) {request.setRequestStr(request.getRequestStr() + ",request-doFilter1");chain.doFilter(request, response, chain);response.setResponseStr(response.getResponseStr() + ",response-doFilter1");}}
5.Filter2.java过滤器实现类
package filter.impl;import web.Request;import web.Response;import filter.Filter;import filter.FilterChain;public class Filter2 implements Filter{@Overridepublic void doFilter(Request request,Response response,FilterChain chain) {request.setRequestStr(request.getRequestStr() + ",request-doFilter2");chain.doFilter(request, response, chain);response.setResponseStr(response.getResponseStr() + ",response-doFilter2");}}
6.FilterChain.java过滤器链条类
package filter;import java.util.ArrayList;import java.util.List;import web.Request;import web.Response;public class FilterChain implements Filter{List<Filter> filters = new ArrayList<Filter>();int index = 0;public FilterChain addFilter(Filter filter){filters.add(filter);return this;}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);}}
7.Main.java程序主方法
import web.Request;import web.Response;import filter.FilterChain;import filter.impl.*;public class Main {public static void main(String[] args) {Request request = new Request();request.setRequestStr("Request:");Response response = new Response();response.setResponseStr("Response:");FilterChain fc = new FilterChain();fc.addFilter(new Filter1()) .addFilter(new Filter2());fc.doFilter(request,response,fc);System.out.println(request.getRequestStr());System.out.println(response.getResponseStr());}}
程序打印结果:
Request:,request-doFilter1,request-doFilter2
Response:,response-doFilter2,response-doFilter1
- java设计模式(二):2.3责任链(返回链)
- java设计模式--责任链(二)
- 责任链模式(JAVA设计模式)
- 设计模式-责任链模式(Java)
- java设计模式--责任链(二)
- java设计模式--责任链(一)
- java设计模式--责任链(三)
- Tomcat设计模式-责任链模式(二)pipeline valve
- 设计模式—责任链模式(二十)
- Java设计模式(九)责任链模式 命令模式
- 责任链 模式(二)
- Java设计模式《二十》责任链模式
- java设计模式-责任链模式(Chain Of Resposibility)
- Java设计模式----责任链模式(Chain of Responsibility)
- Java设计模式(十七)----责任链模式
- Java设计模式(行为型)之-责任链模式
- Java设计模式(17)行为型:责任链模式
- Java/Android 设计模式系列(15)--责任链模式
- java中equals方法的用法以及==的用法(转)
- 学生信息管理系统完整版
- Windows驱动_USB驱动之三
- 《C++程序设计语言》读书笔记
- 12403 - Save Setu
- java设计模式(二):2.3责任链(返回链)
- 算法导论-第2章
- Js深度克隆对象(对象的属性含有对象数组)
- C#简单画图
- HDU 1892 二维树状数组
- 算法导论-第3章
- 数字转换为大写文字数字的代码.
- nyoj 6 喷水装置(一)
- 丑小鸭的故事