策略模式,从防腐层改造聊到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里面,然后根据特定的标识来获取。

总结

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

相关文章
|
2月前
|
人工智能 Serverless 测试技术
nacos常见问题之Serverless 应用引擎2.0不支持 MSE nacos如何解决
Nacos是阿里云开源的服务发现和配置管理平台,用于构建动态微服务应用架构;本汇总针对Nacos在实际应用中用户常遇到的问题进行了归纳和解答,旨在帮助开发者和运维人员高效解决使用Nacos时的各类疑难杂症。
27 0
|
4月前
|
Java Serverless Nacos
Serverless应用引擎问题之nacos客户端报错如何解决
在进行Serverless应用开发和部署时,开发者可能会遇到不同类型的报错信息;本合集着重收录了Serverless环境中常见的报错问题及其解决策略,以助于开发者迅速诊断和解决问题,保证服务的连续性和可用性。
259 1
|
7月前
|
存储 运维 Dubbo
Nacos 注册中心的设计原理:让你的应用轻松实现高效注册与发现!
Nacos 注册中心的设计原理:让你的应用轻松实现高效注册与发现!
118 0
|
7月前
|
Java 数据库连接 Go
如何在Spring Boot应用中使用Nacos实现动态更新数据源
如何在Spring Boot应用中使用Nacos实现动态更新数据源
275 0
|
7月前
|
Java Nacos Spring
Nacos spring-cloud 版本没找到共享配置文件的说明,Nacos服务中共享,并且可以被多个应用获取和使用。这个在官网哪里有说明啊
Nacos spring-cloud 版本没找到共享配置文件的说明,Nacos服务中共享,并且可以被多个应用获取和使用。这个在官网哪里有说明啊
37 1
|
存储 安全 Cloud Native
Nacos 2.1.0发布,支持特性定制插件
Nacos 全称为 Dynamic Naming and Configuration Service,其目标是更易于构建云原生应用的动态服务发现、配置管理和服务管理平台。Nacos 诞生于阿里巴巴 2008 年的五彩石项目,在阿里十年双 11 中成长,帮助业务解决微服务的扩展性和高可用问题。
Nacos 2.1.0发布,支持特性定制插件
|
16天前
|
运维 JavaScript Java
Serverless 应用引擎产品使用之Nacos 在集中发版时遇到老年代暂满,并且频繁进行 Full GC,但是 GC 后内存没有降下来如何解决
阿里云Serverless 应用引擎(SAE)提供了完整的微服务应用生命周期管理能力,包括应用部署、服务治理、开发运维、资源管理等功能,并通过扩展功能支持多环境管理、API Gateway、事件驱动等高级应用场景,帮助企业快速构建、部署、运维和扩展微服务架构,实现Serverless化的应用部署与运维模式。以下是对SAE产品使用合集的概述,包括应用管理、服务治理、开发运维、资源管理等方面。
25 0
|
16天前
|
Cloud Native Java Nacos
Spring Cloud Nacos:概念与实战应用
【4月更文挑战第28天】Spring Cloud Nacos 是一个基于 Spring Cloud 构建的服务发现和配置管理工具,适用于微服务架构。Nacos 提供了动态服务发现、服务配置、服务元数据及流量管理等功能,帮助开发者构建云原生应用。
21 0
|
16天前
|
Dubbo Java Serverless
Serverless 应用引擎操作报错合集之Nacos中nacos启动正常,访问白页,启动日志显示正常如何解决
Serverless 应用引擎(SAE)是阿里云提供的Serverless PaaS平台,支持Spring Cloud、Dubbo、HSF等主流微服务框架,简化应用的部署、运维和弹性伸缩。在使用SAE过程中,可能会遇到各种操作报错。以下是一些常见的报错情况及其可能的原因和解决方法。
25 0
Serverless 应用引擎操作报错合集之Nacos中nacos启动正常,访问白页,启动日志显示正常如何解决
|
域名解析 Kubernetes Java
图文详述Nacos配置中心使用:应用间配置共享、扩展配置文件加载优先级、新老版本差异
图文详述Nacos配置中心使用:应用间配置共享、扩展配置文件加载优先级、新老版本差异
2696 1
图文详述Nacos配置中心使用:应用间配置共享、扩展配置文件加载优先级、新老版本差异