zoukankan      html  css  js  c++  java
  • 讲清责任链模式

    责任链模式

    (Chain of Responsibility Pattern)
    责任链模式相信很多人在工作中也接触过。

    • javax.servlet.Filter
    • struts的拦截器
    • SpringMVC的拦截器
      那么,接下来我们来进行更加深入的、直观的了解。

    讲解重点

    1. 责任链示例代码
    2. 链条与链条之间操作示范
    3. 自己实现简单的链式编程

    定义

    顾名思义,责任链模式(Chain of Responsibility Pattern)为请求创建了一个接收者对象的。这种模式给予请求的类型,对请求的发送者和接收者进行解耦。这种类型的设计模式属于行为型模式。
    在这种模式中,通常每个接收者都包含对另一个接收者的引用。如果一个对象不能处理该请求,那么它会把相同的请求传给下一个接收者,依此类推。

    上面的一大堆看不懂,那我们通过几个例子进行解析,看完例子相信,你可以直接用自己的话,解释什么是责任链模式

    举个栗子

    • 父类接口Filter
    /**
     * 为了实现filter链条的顺序执行依赖于上一个Filter的返回值
     * 修改Filter中的doFilter的返回类型为boolean
     */
    interface Filter {
       boolean  doFilter(Msg msg);
    }
    
    • 一系列过滤器

    过滤器

    • 链条类
    //过滤链
    class FilterChain implements Filter {
        List<Filter> filters = new ArrayList<>(16);
    
        //直接返回FilterChain,再进行add时代码易读性增大(链式编程)
        public FilterChain add(Filter filter) {
            filters.add(filter);
            return this;
        }
    
        public void remove(Filter filter) {
            filters.remove(filter);
        }
    
        public boolean doFilter(Msg msg) {
            for (Filter filter : filters) {
               if(!filter.doFilter(msg)){
                   return false;
               }
            }
            return true;
        }
    }
    
    • 测试程序
    public class Main {
        public static void main(String[] args) {
            Msg msg = new Msg();
            msg.setMsg("大家好:); <script> ,欢迎访问 taobao.com ,大家都是996");
    
            FilterChain filterChain = new FilterChain();
            filterChain.add(new HtmlFilter()).add(new SensitiveFilter());
    
            FilterChain filterChain2 = new FilterChain();
            filterChain2.add(new EmjogFilter()).add(new UrlFilter());
    /**
     *  让FilterChain实现Filter接口,这个链条也可以当作是一个Filter加到别的链条上去
     */
            filterChain.add(filterChain2);
    
            filterChain.doFilter(msg);
            System.out.println(msg);
        }
    }
    
    • 输出
      输出示例

    结语

    测试程序中将过滤器,分别放到了两个FilterChain.
    其一:演示责任链的工作流程
    其二:演示链条与链条之间的处理
    这样就通过责任链模式,简单的实现了过滤操作。

  • 相关阅读:
    Docker-MsSqlServer和安装版本异同
    ASP.NET Core入门
    开源网站.NETMVC+ Layui+SqlSugar+RestSharp
    SqlSugar ORM已经支持读写分离
    【开源框架】SqlSugarRepository 全库ORM 正式发布
    花几分钟搭建一个自已的GIT服务器
    [开源ORM] SqliteSugar 3.x .net Core版本成功上线
    N[开源].NET CORE与MySql更配, MySqlSugar ORM框架 3.x
    Dapper ORM VS SqlSugar ORM的 8场对决
    .NET 开源SqlServer ORM框架 SqlSugar 3.0 API
  • 原文地址:https://www.cnblogs.com/yahooz/p/13098399.html
Copyright © 2011-2022 走看看