责任链模式----ChainOfResponsibility
来源:互联网 发布:mac图片怎么保存 编辑:程序博客网 时间:2024/06/01 10:04
意图:避免请求发送者与接收者耦合在一起,让多个对象都有可能接收请求,将这些对象连接成一条链,
并且沿着这条链传递请求,直到有对象处理它为止
主要解决:职责链上的处理者负责处理请求,客户只需要将请求发送到职责链上即可,无须关心请求的处
主要解决:职责链上的处理者负责处理请求,客户只需要将请求发送到职责链上即可,无须关心请求的处
理细节和请求的传递,所以职责链将请求的发送者和请求的处理者解耦了
什么时候使用:在处理消息的时候以过滤很多道
如何解决 :拦截的类都实现统一接口
什么时候使用:在处理消息的时候以过滤很多道
如何解决 :拦截的类都实现统一接口
应用实例:1、红楼梦中的“击鼓传花”2、JS中的事件冒泡 3、JAVA WEB中 Apache Tomcat 的对Encoding的 处理,
Struts2 的拦截器, jsp servlet 的Filte
package com.bjsxt.dp.filter;public interface Filter {void doFilter(Request request, Response response, FilterChain chain);}
package com.bjsxt.dp.filter;public class Request {String requestStr;public String getRequestStr() {return requestStr;}public void setRequestStr(String requestStr) {this.requestStr = requestStr;}}
package com.bjsxt.dp.filter;public class Response {String responseStr;public String getResponseStr() {return responseStr;}public void setResponseStr(String responseStr) {this.responseStr = responseStr;}}
package com.bjsxt.dp.filter;import java.util.ArrayList;import java.util.List;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;}@Overridepublic void doFilter(Request request, Response response, FilterChain chain) {if(index == filters.size()) return ;Filter f = filters.get(index);index ++;f.doFilter(request, response, chain);}}
package com.bjsxt.dp.filter;public class HTMLFilter implements Filter {@Overridepublic 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()";}}
package com.bjsxt.dp.filter;public class SesitiveFilter implements Filter {@Overridepublic void doFilter(Request request, Response response, FilterChain chain) {request.requestStr = request.requestStr.replace("被就业", "就业") .replace("敏感", "") + "---SesitiveFilter()";chain.doFilter(request, response, chain);response.responseStr += "---SesitiveFilter()";}}
package com.bjsxt.dp.filter;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());}}
0 0
- 责任链模式----ChainOfResponsibility
- ChainOfResponsibility--责任链模式
- 责任链模式(ChainOfResponsibility )
- [设计模式]ChainOfResponsibility责任链模式
- 17、责任链模式(ChainofResponsibility)
- 设计模式--责任链模式ChainOfResponsibility(行为型)
- 设计模式之责任链模式(ChainOfResponsibility)&正反顺逆链处理
- 设计模式——责任链(ChainOfResponsibility)学习笔记
- ChainOfResponsibility(职责链)模式
- 职责链模式ChainOfResponsibility
- 理解J2EE中的filter,interceptor 之 责任链设计模式(ChainOfResponsibility)
- 18.ChainOfResponsibility-职责链模式
- 18.ChainOfResponsibility-职责链模式
- ChainOfResponsibility 模式
- 设计模式--ChainofResponsibility 模式
- 行为模式之一---ChainOfResponsibility
- 设计模式之 chainofresponsibility
- 设计模式 ChainOfResponsibility
- Tutorial: Using Gazebo plugins with ROS
- 真迹调试小错误
- POJ 2082 The Fewest Coins
- mac上git的安装与配置
- c#多维数组
- 责任链模式----ChainOfResponsibility
- java线程池学习(四) —— Executors类
- IOS开发-属性动画和关键帧动画的使用
- sql server数据类型详解
- UIScrollView和UIPageControl组合照片浏览滑动效果
- Java核心技术第4章(2)
- leetcode题目 合并N个排序好的链表
- matlab中hold指令、figure指令及subplot指令的使用
- ubuntu15.04编译lua源码