• 策略模式,从防腐层改造聊到Nacos插件的应用


    大家好,我叫大鸡腿,大家可以关注下我,会持续更新技术文章还有人生感悟,感谢~

    在这里插入图片描述

    前言


    总所周知,策略模式是个好东西,他不仅是一种技术,在我看来更是一种思想。

    what is 策略模式

    策略模式就像一个工具箱,当我们遇到不同的场景,拿出不同工具。它的好处是
    符合开闭原则还有单一原则,当我们需要对另外一种场景进行处理的时候,只需要去打造另一款工具,而不是在之前的工具去修改。

    防腐层改造

    what is 防腐层


    我们在学习DDD的时候,会学习到防腐层。它主要功能是将第三方api进行隔离,这样不会跟内部系统进行强耦合,提高了可扩展性。

    how to do it


    场景

    刚好在项目里头,有依赖第三方api,之前由于时间很赶,直接跟业务代码耦合在一起了,在最近时间比较充裕的时候,我们将它优化一下。

    思路:采用防腐层,将外部api进行隔离开,采用api的形式进行实现,这样为后面的扩展提供良好的基础。

    防腐层改造

    首先是定义api,为了实现类通过该接口进行扩展。

    public interface Facade {
    
        /**
         * 处理逻辑
         *
         */
        xx<?> dealWith();
    
        /**
         * 类型
         *
         * @return
         */
        String getType();
    
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17

    然后我们来实现扩展类

    
    @Service
    public class xxFacade implements Facade {
    
        @Override
        xx<?> dealWith(){
            //todo 做特定逻辑处理
        }
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10

    编写设配器

    
    @Service
    public class Adapter {
    
        @Resource
        private List<Facade> facadeList;
    
       
        private Facade getFacade(String xx) {
            return facadeList.stream().filter(it -> it.getType().equals(xx)).findFirst().orElseThrow(() -> new BizException("没有找到实现类"));
        }
    
       
        public xx<?> dealWith(xx) {
            return getFacade(xx).dealWith();
        }
    
    }
    
    
    • 1
    • 2
    • 3
    • 4
    • 5
    • 6
    • 7
    • 8
    • 9
    • 10
    • 11
    • 12
    • 13
    • 14
    • 15
    • 16
    • 17
    • 18
    • 19

    到这里我们看到,借助spring注入实例的方法,然后通过接口里头的type方法,来判断我们具体要拿出什么工具来解决问题。到此反腐层就改造完成✅

    Nacos 插件

    我们看下官网的文档,里面也有介绍Nacos插件这一块spi,如下图鉴权这一块的spi。接下来,我们来看下策略模式中里面的体现吧~

    首先看到的是接口类,我们可以通过实现这个接口来扩展鉴权功能。

    这里就是接口的一种实现类。

    这里通过classload来将所有实现该接口的类塞到set里面,然后根据特定的标识来获取。

    总结

    策略模式很常见的设计模式,我们可以借助它来提高代码质量,提高系统的扩展性。

  • 相关阅读:
    VLC 21年,重新审视低延迟直播
    关于Vue本地图片转file传到后端服务器(不通过组件上传)
    神经网络-使用Sequential搭建神经网络
    葡聚糖-NHS/N3/Alkyne/SH/Biotin/CHO/OPSS/OH/NH2/COOH/MAL各种活性基团
    1.1 redis介绍
    全网最全JAVA面试八股文,终于整理完了
    LeetCode //C - 208. Implement Trie (Prefix Tree)
    【C语言基础】循环
    三相PWM整流器滞环电流控制Simulink仿真模型
    【机器学习】符号主义类模型:解码智能的逻辑之钥
  • 原文地址:https://blog.csdn.net/weixin_38336658/article/details/125570649