知识大全 责任链

Posted

篇首语:沉舟侧畔千帆进,病树前头万木春。本文由小常识网(cha138.com)小编为大家整理,主要介绍了知识大全 责任链相关的知识,希望对你有一定的参考价值。

Java设计模式:责任链  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下吧!

    责任链模式(Chain of Responsibility)的目标是使多个对象都有机会处理请求 从而避免请求的发送者和接收者之间的耦合关系 将这些对象连成一条链 并沿着这条链传递请求 直到有一个对象处理它为止     在处理用户的请求时可能要根据不同的情况对请求添加不同的处理逻辑 在这时候就可以利用责任链进行设计 当需要添加一个处理逻辑时可以很方便的添加一个处理的节点     现在我们的需求是处理用户的请求 将用户提交的字符串信息进行层层处理 同时在处理完成之后返回结果时 也要对返回的字符串进行层层处理 而处理返回的情况时其处理的顺序和先前是正好相反的顺序     首先建立用户的请求和接收对象Request和Response

  

    package  lcq filter;   public class Request       String requestStr;       public String getRequestStr()           return requestStr;             public void setRequestStr(String requestStr)           this requestStr = requestStr;           

  

    package  lcq filter;   public class Response       String responseStr;       public String getResponseStr()           return responseStr;             public void setResponseStr(String responseStr)           this responseStr = responseStr;           

  我们将处理用户信息的逻辑抽象成为一个个的过滤器 进一步抽象出过滤器接口Filter

  

    package  lcq filter;   public interface Filter       public void doFilter(Request request  Response response FilterChain chain);     

  注意在Filte接口中doFilter方法参数中有FilterChain的一个变量 我们再建立FilterChain类

  

    package  lcq filter;   import java util ArrayList;  import java util List;   public class FilterChain implements Filter       List<Filter> filters = new ArrayList<Filter>();      int index =  ;       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);          

  在FilterChain中继承了Filter接口 从而实现了doFilter方法 在FilterChain中又有一个index变量 该变量是用来标记当前访问的是哪一个过滤器 这些过滤器是存放在ArrayList中的 这样用户在使用的时候就可以实现自己的过滤器 编写自己的处理逻辑 从而将自己的过滤器添加到ArrayList中 再调用FilterChain的doFilter方法遍历整个责任链

  下面我们编写三个过滤器

  HTMLFilter类

  

    package  lcq filter;   /**   * 过滤HTML中的脚本元素   * @author lcq   *   */ public class HTMLFilter implements Filter        @Override     public void doFilter(Request request  Response response FilterChain chain)           request requestStr = request getRequestStr() replace( <   [ )                   replace( >   ]  HTMLFilter );          chain doFilter(request  response  chain);          response responseStr +=  HTMLFilter ;                     

  SesitiveFilter类

  

    package  lcq filter;   public class SesitiveFilter implements Filter        @Override     public void doFilter(Request request  Response response  FilterChain chain)           request requestStr = request getRequestStr() replace( 敏感      )                   replace( 猫猫   haha SesitiveFilter );          chain doFilter(request  response  chain);          response responseStr +=  SesitiveFilter ;            

  FaceFilter类

  

    package  lcq filter;   public class FaceFilter implements Filter        @Override     public void doFilter(Request request  Response response  FilterChain chain)           request requestStr = request getRequestStr() replace( :)                   ^V^ FaceFilter );          chain doFilter(request  response  chain);          response responseStr +=  FaceFilter ;            

  最后编写测试类

  

    package  lcq filter;   public class Main       public static void main(String[] args)           String message =  敏感词汇 重庆 <script> 躲猫猫 :) ;          Request request = new Request();          request setRequestStr(message);          Response response = new Response();          response setResponseStr( response );          FilterChain fc = new FilterChain();          fc addFilter(new HTMLFilter()) addFilter(new SesitiveFilter());           FilterChain fc  = new FilterChain();          fc addFilter(new FaceFilter());          fc addFilter(fc );          fc doFilter(request  response fc);          System out println( request =   + request getRequestStr());          System out println( response =   + response getResponseStr());           

  在上面的实例中应该注意两个地方

   我们建立的FilterChain中继承了Filter接口 所以在测试类中就可以像使用其他的过滤器一样使用FilterChain 大大提高了灵活性

cha138/Article/program/Java/gj/201311/27381

相关参考

知识大全 责任链模式(Chain of Responsibility)

责任链模式(ChainofResponsibility)  以下文字资料是由(全榜网网www.cha138.com)小编为大家搜集整理后发布的内容,让我们赶快一起来看一下

知识大全 java 设计模式之责任链模式

   不知道大家都写过宏没有就是一个键绑定多个技能如果排在前面的技能有CD则跳过此技能会执行之后的技能记得曾经玩DK打怪的时候就是用一个键一直按就行了在servlet里的

知识大全 北京链家房地产有限公司招聘是真的吗

北京链家房地产有限公司招聘是真的吗招聘是真的,但压力很大,我原来就在链家工作,三个月要完成一万五千左右的业绩,也就是你三个月加起来的签定租房合同上业绩的相加,不好乾,2000无责任底薪(没业绩也可以拿

知识大全 告他人猥亵但没有直接证据能追究责任吗

告他人猥亵但没有直接证据能追究责任吗没有证据他可以反咬你一口猥亵没有直接证据,能怎么告未成年人被害人的陈述可以作为案件的证据,但同时还要有相应的其它证据以证实,并形成完整的证据链,方可确定犯罪嫌疑人有

知识大全 链队列

链队列链队列的定义  队列的链式存储结构简称为链队列它是限制仅在表头删除和表尾插入的单链表链队列的结构类型说明 注意  增加指向链表上的最后一个结点的尾指针便于在表尾做插入操作  链队列示意图见上图图

知识大全 栈和队列 - 队列 - 链队列

  链队列的定义  队列的链式存储结构简称为链队列它是限制仅在表头删除和表尾插入的单链表  链队列的结构类型说明  >  注意  增加指向链表上的最后一个结点的尾指针便于在表尾做插入操作  链队列示意

知识大全 nginx实现防盗链配置方法介绍

有些朋友觉得防盗链就是防止图片其实有很多东西要进行防盗链了下面我来介绍在nginx中实现防盗链配置方法有对图片防盗链与下载资源等防盗链配置假设网站域名是编辑nginxconf在区域添加如下内容&nbs

光合作用的电子传递链与氧化磷酸化作用的电子传递链有什么异同?

光合作用电子传递链(photosyntheticelectrontransferchain)也是由一系列的电子载体构成的,同线粒体呼吸链中电子载体的作用基本相似。但二者不同的是,线粒体呼吸链中的载体位

知识大全 循环链表与双向链表

第九课本课主题循环链表与双向链表教学目的掌握循环链表的概念掌握双向链表的的表示与实现教学重点双向链表的表示与实现教学难点双向链表的存储表示授课内容一复习线性链表的存储结构二循环链表的存储结构循环链表是

知识大全 破解防盗链图片的php函数

  现在很多网站和论坛的图片都在使用防盗链技术既然有防盗链那么肯定就有破解防盗链的方法啦下面小编就来为你提供一个破解防盗链图片的php函数不过只支持jpg和gif哦如果想支持多种图处格式大家可以做下修