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

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

theme: smartblue

highlight: atom-one-dark

前言


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

what is 策略模式

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

d1d5273e9ca8413aa9aebdb4fff7428e~tplv-k3u1fbpfcp-watermark.image

防腐层改造

what is 防腐层


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

how to do it


场景

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

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

防腐层改造

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

public interface Facade {

    /**
     * 处理逻辑
     *
     */
    xx<?> dealWith();

    /**
     * 类型
     *
     * @return
     */
    String getType();

}

然后我们来实现扩展类


@Service
public class xxFacade implements Facade {

    @Override
    xx<?> dealWith(){
        //todo 做特定逻辑处理
    }
}

编写设配器


@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();
    }

}

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

Nacos 插件

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

2ab94d1955494b72ad162cf7752b4e73~tplv-k3u1fbpfcp-watermark.image

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

a4e243d0b8574ea1a394b4129c673bab~tplv-k3u1fbpfcp-watermark.image

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

f68bcbabdff140e292ea2d77635760c0~tplv-k3u1fbpfcp-watermark.image

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

总结

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

相关文章
|
Java Serverless Nacos
Serverless应用引擎问题之nacos客户端报错如何解决
在进行Serverless应用开发和部署时,开发者可能会遇到不同类型的报错信息;本合集着重收录了Serverless环境中常见的报错问题及其解决策略,以助于开发者迅速诊断和解决问题,保证服务的连续性和可用性。
393 1
|
人工智能 Serverless 测试技术
nacos常见问题之Serverless 应用引擎2.0不支持 MSE nacos如何解决
Nacos是阿里云开源的服务发现和配置管理平台,用于构建动态微服务应用架构;本汇总针对Nacos在实际应用中用户常遇到的问题进行了归纳和解答,旨在帮助开发者和运维人员高效解决使用Nacos时的各类疑难杂症。
224 0
|
存储 运维 Dubbo
Nacos 注册中心的设计原理:让你的应用轻松实现高效注册与发现!
Nacos 注册中心的设计原理:让你的应用轻松实现高效注册与发现!
287 0
|
Java 数据库连接 Go
如何在Spring Boot应用中使用Nacos实现动态更新数据源
如何在Spring Boot应用中使用Nacos实现动态更新数据源
1134 0
|
Java Nacos Spring
Nacos spring-cloud 版本没找到共享配置文件的说明,Nacos服务中共享,并且可以被多个应用获取和使用。这个在官网哪里有说明啊
Nacos spring-cloud 版本没找到共享配置文件的说明,Nacos服务中共享,并且可以被多个应用获取和使用。这个在官网哪里有说明啊
165 1
|
8月前
|
人工智能 JSON API
Nacos 发布 MCP Registry,实现存量应用接口“0改动”升级到 MCP 协议
MCP(Model Calling Protocol)生态快速发展,Nacos作为MCP Registry,通过与Higress网关结合,实现“0代码”将存量API转化为MCP协议接口。本文详细解析了Nacos如何快速构建MCP Server,包括工具列表暴露、协议转换原理及优势。同时,通过高德API实例演示“0改动”适配流程。Nacos 3.0正式发布,定位AI应用服务管理平台,支持动态服务发现与配置管理,助力MCP生态发展。欢迎参与社区共建!
1499 1
|
8月前
|
存储 人工智能 测试技术
Nacos托管LangChain应用Prompts和配置,助力你的AI助手快速进化
AI 应用开发中,总有一些让人头疼的问题:敏感信息(比如 API-KEY)怎么安全存储?模型参数需要频繁调整怎么办?Prompt 模板改来改去,每次都得重启服务,太麻烦了!别急,今天我们就来聊聊如何用 Nacos 解决这些问题。
|
监控 持续交付 调度
Nacos支持哪些应用场景
Nacos支持哪些应用场景
|
网络协议 Java Nacos
Nacos的应用
Nacos的应用
217 0
|
运维 Java Nacos
Spring Cloud应用框架:Nacos作为服务注册中心和配置中心
Spring Cloud应用框架:Nacos作为服务注册中心和配置中心

热门文章

最新文章