利用SpringBoot框架轻松上手常用的设计模式

1、单例模式

常见模式:

SpringBoot启动的加载到容器中,以后再调用时也不会重新创建,而是之间从容器中拿。

像@Component、@Service、@Bean都是这样

懒汉式:

如果你的单例对象在启动过程比较耗时服务启动又追求服务效率的话,或者你的单例对象在启动的过程中初始化可能会失败,这种时候就需要使用懒汉式进行处理,最简单的做法就是单例对象初始化的地方还有使用单例对象加载的地方添加@Lazy。如下:

@Component
@Lazy
@Slf4j
public class SingleCaseService {

    public SingleCaseService() {
      log.info("start to init SingleCaseService");
    }

    public String sayHi() {
        return "hi";
    }
}
@SpringBootTest
@Slf4j
class SingleCaseServiceTest {

    @Autowired
    @Lazy
    SingleCaseService singleCaseService;

    @Test
    void sayHi() {
        log.info("sayHi");
        singleCaseService.sayHi();
    }
}

补充:@DependsOn也会让@Lazy失效, 需要注意用法

2、策略模式

先看一下定义:

在策略模式(Strategy Pattern)中,一个类的行为或其算法可以在运行时更改。这种类型的设计模式属于行为型模式。

在策略模式中,我们创建表示各种策略的对象和一个行为随着策略对象改变而改变的context 对象。策略对象改变context对象的执行算法

使用场景: 1、如果在一个系统里面有许多类,它们之间的区别仅在于它们的行为,那么使用策略模式可以动态地让一个对象在许多行为中选择一种行为。 2、一个系统需要动态地在几种算法中选择一种。 3、如果一个对象有很多的行为,如果不用恰当的模式,这些行为就只好使用多重的条件选择语句来实现。

解决的丑陋代码形如:

if(fixType.equal("A")){

}else if (fixType.equal("B")){
    
}else if (fixType.equal("C")){
    
}else if (fixType.equal("D")){
    
}

or

switch(type){
    case A:
        break;
    case B:
        break;
    case C:
        break;
    case D:
        break;
    default:
        break;
}

参考代码:

使用接口定义策略的共性接口,例如有些修复的大致流程差不多,而且有公共的处理操作,主要是片段是否支持修复和进行修复,目前有操作系统修复和数据库修复策略两种,后面可能会继续扩展其他修复场景

第一种方法是使用接口,承载一些对应的业务功能,然后使用Context进行自动装配和选择,代码如下:

public interface IFixStrategy {

    boolean isSupport(FixInfo fixInfo);

    void fix(FixInfo fixInfo);
}
@Component("dbFix")
public class DbFixStrategy extends FixStrategy implements IFixStrategy {

    @Override
    public boolean isSupport(FixInfo fixInfo) {
        return false;
    }

    @Override
    public void fix(FixInfo fixInfo) {
        //
    }
}
@Component
public class FixStrategyContext {
    @Resource
    Map<String, IFixStrategy> iFixStrategyMap;

    @Resource
    Map<String, FixStrategy> fixStrategyMap;

    public IFixStrategy getCorrespondingIFixStrategy(String type) {
        return iFixStrategyMap.get(type);
    }

    public FixStrategy getCorrespondingFixStrategy(String type) {
        return fixStrategyMap.get(type);
    }
}

另外一种是使用抽象类来承载,这种可以将子类的一些公共能力放一起

public abstract class FixStrategy {

    boolean isSupport(FixInfo fixInfo) {
        throw new NotImplementedException();
    }

    void fix(FixInfo fixInfo) {
        throw new NotImplementedException();
    }

    void commonHandle() {

    }

}

对应的架构图下图:

在这里插入图片描述

对应的代码github链接:https://github.com/junkaitongxue/LearnSpringBoot/tree/main/demo/src/main/java/com/dreamkite/demo/service/strategy

3、工厂模式

策略模式是一种行为型模式,工厂模式跟其类似,不过位创建型模式,以上代码则做个简单的改造即可,将Context变化成Factory, 根据FixInfo选择对应的工厂进行对象创建即可,这里就不做展开

4、TODO

后续有想到设计模式跟Springboot框架可以很好配合的再继续补充分享,感兴趣的话记得点赞~

(以上为DreamKite本人原创,转载请附上原文链接)

  • 6
    点赞
  • 27
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

Dream_Kite

你的鼓励,是我不断创作的动力。

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值