• 责任链设计模式案例详解,看这一篇就够了


    老哥哔哔哔

    责任链设计模式在日常工作中很常见,也很重要,很多开源框架都采用了责任链设计模式,比如;servlet中的Filter、Dubbo中的Filter、Mybatis中的Plugin、spring MVC的HandlerExecutionChain等等,都是采用了责任链设计模式。

    如果这篇文章对你有所帮助,请帮老哥点个【在看】和【】,如果能分享给你的朋友,那就更好了,嘿嘿

    生宝宝引发的程序思考

    什么是责任链

    大家就可以理解成:先干什么,后干什么,几个事形成一个有序的链表。

    就像上面生宝宝的场景一样,要先结婚 —> 洞房 —> 怀孕 —> 生宝宝

    实现责任链设计模式

    原始代码逻辑

    public static void main(String[] args) {
        String status = "结婚证";
        if (status.equals(结婚了)) {
            status = "洞房";
        }
        if (status.equals(洞房)) {
            status = "怀孕";
        }
        if (status.equals(怀孕)) {
            status = "生宝宝啦";
        }
        System.out.println(status);
    }
    复制代码

    用责任链模式改造

    • 构造责任链上的每一个节点
    // 总接口
    public interface Filter {
        String doFilter(String status);
    }
    
    // 创建责任链上的每一个流程节点
    
    class 结婚Filter implements Filter {
        @Override
        public String doFilter(String data) {
            return "结婚完毕,该洞房了";
        }
    }
    
    class 洞房Filter implements Filter {
        @Override
        public String doFilter(String data) {
            return "洞房完毕,该怀孕了";
        }
    }
    
    class 怀孕Filter implements Filter {
        @Override
        public String doFilter(String data) {
            return "怀孕完毕,该生宝宝了";
        }
    }
    class 生宝宝Filter implements Filter {
        @Override
        public String doFilter(String data) {
            return "宝宝生出来啦";
        }
    }
    复制代码
    • 构造责任链的链子
    public class FilterChain {
    
        // 链子
        private List<Filter> filterList = Lists.newLinkedList();
    
        // 向链子中添加执行节点
        public FilterChain() {
            filterList.add(new 结婚Filter());
            filterList.add(new 洞房Filter());
            filterList.add(new 怀孕Filter());
            filterList.add(new 生宝宝Filter());
        }
    
        // 执行链子上的节点
        public String processData(String status) {
            String str = null;
            for (Filter filter : filterList) {
                str = filter.doFilter(status);
            }
            return str;
        }
    }
    复制代码
    • 开始生宝宝
    public static void main(String[] args) {
        String str = new FilterChain().processData("结婚证");
        System.out.println(str);
    }
    复制代码

    可能大家觉得本来if / else就搞定的事,为啥非要弄出这么多类来,上述是模拟场景,真实的业务场景远远要复杂的多。

    该设计模式能让程序解耦职责明确、提高程序的可读性、以及程序的可维护性。这是一个高级程序员必备思想。

    人生感言

    原来生宝宝如此简单,哈哈,一个责任链设计模式搞定,如果你也是负责任的男人,不会责任链设计模式好意思吗?

    以上故事纯属虚构,生不出孩子概不负责

    IT 老哥

    一个在大厂做高级Java开发的程序猿

  • 相关阅读:
    mongodb入门安装与配置
    mssql export db
    初识django
    git
    水晶报表的使用经验和资料总结
    SQL中CONVERT转化函数的用法▲
    生活
    SQL中的临时表和表变量
    Convert Datetime to String in Sql Server
    转:探讨SQL Server 2005的安全策略
  • 原文地址:https://www.cnblogs.com/itlaoge/p/14219588.html
Copyright © 2020-2023  润新知