责任链模式面向对象程式设计里是一种软件设计模式,它包含了一些命令对象和一系列的处理对象。

每一个处理对象决定它能处理哪些命令对象,它也知道如何将它不能处理的命令对象传递给该链中的下一个处理对象。也就是说责任链决定了任务的处理上方和下方。

该模式还描述了往该处理链的末尾添加新的处理对象的方法。<wiki>

1:建立一个filte接口,用来处理客户度发送给服务器端,以及服务器端返回给客户端的消息。

 public interface Filter {
void doFilter(Request request, Response response, FilterChain chain);
}

2:可以模拟客户端,以及服务器端处理消息的类。

 package com.hone.design;
//模拟request
public class Request {
String requestStr; public String getRequestStr() {
return requestStr;
}
public void setRequestStr(String requestStr) {
this.requestStr = requestStr;
}
}
 package com.hone.design;
//模拟response类
public class Response {
String responseStr; public String getResponseStr() {
return responseStr;
}
public void setResponseStr(String responseStr) {
this.responseStr = responseStr;
}
}

3:我们假设这样一个项目,准备做一个小型的论坛性质的,那么可以用filter对消息进行处理,防止一些敏感的词汇,和一些不恰当的字符。

那么我们肯定要定义filter。

package com.hone.design;
//定义一个filter,用来过滤一些包含了html标签的消息。
public class HTMLFilter implements Filter{
@Override
public 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.hone.design;

 public class SensitiveFilter implements Filter {
//定义一个filter用来过滤一些政治敏感的词汇
@Override
public void doFilter(Request request, Response response, FilterChain chain) {
request.requestStr=request.requestStr.replace("胡锦*涛", "likeqiang")
+"----SensitiveFilter";
chain.doFilter(request, response, chain);
response.responseStr +="----SensitiveFilter";
}
}

4:我们的想法是这样的,用户现在客户端发送一个消息,在client——sever的过程中,先经过HTMLfilter过滤器,在经过SensitiveFilter过滤器到达服务器端。

等待sever处理之后在经过SensitiveFilter——HTMLfilter反馈给client。整过过程的难点是:怎么处理好过滤器之间的处理关系,让filter经过类似于的方式来处理消息。

可以考虑用一个FilterChain,用过链的方式来处理filter之间的关系

 package com.hone.design;

 import java.util.ArrayList;
import java.util.List; public class FilterChain implements Filter{
List<Filter> filters=new ArrayList<Filter>();
int index = 0;  //用来处理filter之间的关系用的 public FilterChain addFilter(Filter f){
this.filters.add(f);
return this;
} @Override
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);
}
}

5:用main方法来处理消息。

 package com.hone.design;

 public class MainTest {
public static void main(String[] args) {
String msg="hello, <你好>,<我不是影帝>就是这么简单,温家宝,就是这么简单的事情";
Request request=new Request();
request.setRequestStr(msg);
Response response=new Response();
response.setResponseStr("response");
FilterChain fc=new FilterChain();
fc.addFilter(new HTMLFilter())
   .addFilter(new SensitiveFilter());
fc.doFilter(request, response, fc);
System.out.println(request.getRequestStr());
System.out.println(response.getResponseStr());
}
}

整个消息的处理过程都强调filter 的先后处理顺序。

  

设计模式——责任链(chain of responsibiltiy)的更多相关文章

  1. iOS设计模式 - 责任链

    iOS设计模式 - 责任链 原理图 说明 在责任链模式里,很多对象由每一个对象对其下家的引用而连接起来形成一条链.请求在这个链上传递,直到链上的某一个对象决定处理此请求.发出这个请求的客户端并不知道链 ...

  2. java 设计模式 -- 责任链模式

    设计模式 – 责任链模式 介绍: 责任链模式是一种动态行为模式,有多个对象,每一个对象分别拥有其下家的引用.连起来形成一条链.待处理对象则传到此链上,在此链进行传递,且待处理对象并不知道此会被链上的哪 ...

  3. 浅谈Python设计模式 -- 责任链模式

    声明:本系列文章主要参考<精通Python设计模式>一书,并且参考一些资料,结合自己的一些看法来总结而来. 之前在最开始就聊了Python设计模式有三种,其中关于创建型和结构型设计模式基本 ...

  4. 【设计模式】Java设计模式 - 责任链模式

    [设计模式]Java设计模式 - 责任链模式 不断学习才是王道 继续踏上学习之路,学之分享笔记 总有一天我也能像各位大佬一样 一个有梦有戏的人 @怒放吧德德 目录 [设计模式]Java设计模式 - 责 ...

  5. [工作中的设计模式]责任链模式chain

    一.模式解析 责任链模式是一种对象的行为模式.在责任链模式里,很多对象由每一个对象对其下家的引用而连接起来形成一条链.请求在这个链上传递,直到链上的某一个对象决定处理此请求.发出这个请求的客户端并不知 ...

  6. 设计模式-责任链模式Chain of Responsibility)

    一.定义 职责链模式是一种对象的行为模式.在职责链模式里,很多对象由每一个对象对其下家的引用而连接起来形成一条链.请求在这个链上传递,直到链上的某一个对象决定处理此请求.发出这个请求的客户端并不知道链 ...

  7. C#设计模式-责任链模式(Chain of Responsibility Pattern)

    引子 一个事件需要经过多个对象处理是一个挺常见的场景,譬如采购审批流程,请假流程,软件开发中的异常处理流程,web请求处理流程等各种各样的流程,可以考虑使用责任链模式来实现.现在以请假流程为例,一般公 ...

  8. 23种设计模式--责任链模式-Chain of Responsibility Pattern

    一.责任链模式的介绍 责任链模式用简单点的话来说,将责任一步一步传下去,这就是责任,想到这个我们可以相当击鼓传花,这个是为了方便记忆,另外就是我们在项目中经常用到的审批流程等这一类的场景时我们就可以考 ...

  9. Java设计模式-责任链模式(Chain of Responsibility)

    接下来我们将要谈谈责任链模式,有多个对象,每个对象持有对下一个对象的引用,这样就会形成一条链,请求在这条链上传递,直到某一对象决定处理该请求.但是发出者并不清楚到底最终那个对象会处理该请求,所以,责任 ...

随机推荐

  1. springboot项目作为war包运行

    一.首先是pom文件中设置打成war包 < packaging>war< /packaging> 二.然后是修改依赖: <dependency> <group ...

  2. Incorrect column count: expected 1, actual 5

    在使用jdbc的querForObject queryForList的时候,出现Incorrect column count: expected 1, actual 5 比如 String sql = ...

  3. csharp:Microsoft.Ink 手写识别(HandWriting Recognition)

    /* 下載: //Microsoft Windows XP Tablet PC Edition 2005 Recognizer Pack http://www.microsoft.com/zh-cn/ ...

  4. Scrapy框架的使用 -- 自动跳转链接并请求

    # -*- coding: utf-8 -*- import scrapy from movie.items import MovieItem class MoviespiderSpider(scra ...

  5. Angularjs ngTable使用备忘

    项目中用到angularjs的表格ng-table,功能相当强大,像搜索.排序.checkbox.分页.每页表格显示数目等都有.API,demo什么的也只能参考官网了.这里做个备忘,哪天肯定还会用到. ...

  6. 51Nod1957 有限背包计数问题

    传送门 另一个传送门 这题还挺有意思…… 先贴一波出题人的题解…… (啥你说你看不见?看来你还没过啊,等着A了再看或者乖乖花点头盾好了……) 然后是我的做法……思想都是一样的,只是细节不一样而已…… ...

  7. Python入门-初始面向对象

    之前我们代码基本上都是面向过程的,今天我们就来初始一下python中一个重要的内容:面向对象 一.面向对象和面向过程(重点理解) 1.面向过程: 一切以事物的流程为核心. 核心是"过程&qu ...

  8. mongoDB BI 分析利器 - PostgreSQL FDW (MongoDB Connector for BI)

    背景 mongoDB是近几年迅速崛起的一种文档型数据库,广泛应用于对事务无要求,但是要求较好的开发灵活性,扩展弹性的领域,. 随着企业对数据挖掘需求的增加,用户可能会对存储在mongo中的数据有挖掘需 ...

  9. 佛系结对编程---四则运算(Core 第四组)

    ----by core 第四组 ( 邹卫其 范力 ) 一. 项目介绍 1. 能自动生成小学四则运算题目并给出答案,生成题目时可以选择下列参数:   1)生成题目数量   2)每道题目中运算数数量   ...

  10. android网络监听

    http://blog.csdn.net/mxiaoyem/article/details/50857008 http://blog.csdn.net/ke1vin/article/details/5 ...