大家好,我叫大鸡腿。你可以关注我,不断更新技术文章和人生感悟。~
前言
众所周知,战略模式是一件好事。在我看来,它不仅是一种技术,也是一种思想。
what is 策略模式
当我们遇到不同的场景时,战略模式就像一个工具箱。它的优点是 开关原则和单一原则,当我们需要处理另一个场景时,我们只需要创建另一个工具,而不是修改以前的工具。
防腐层改造
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。接下来,我们来看下策略模式中里面的体现吧~
首先看到的是接口类,我们可以通过实现这个接口来扩展鉴权功能。
这里就是接口的一种实现类。
这里通过classload来将所有实现该接口的类塞到set里面,然后根据特定的标识来获取。
总结
策略模式很常见的设计模式,我们可以借助它来提高代码质量,提高系统的扩展性。