Java设计模式 — 策略模式(Spring Boot + 策略模式)

目录

    • 一、前言
    • 二、应用场景
    • 三、代码展示
    • 四、总结

一、前言

作为一个开发者,设计模式是需要我们常常理解和研究的,合理的运用设计模式可以使代码更加具有可读性,博主在近期的工作中呢就Get到一种设计模式“策略模式”,它让博主少写了很多没有意义的代码,接下来博主和大家一起学习这个“策略模式”,希望对大家有所帮助。友情提示:阅读本文需要一定的Spring基础。

二、应用场景

在企业级开发中,实现某种功能会有很多种策略或者算法,我们需要根据业务需求的不同来选择不同的策略或算法来实现这个功能。比如一个将军在前线打仗,他手下有很多大将,要赢这场仗只需要派一员大将即可,将军可以根据战局的情况合适的派出一员大将参战赢得胜利;策略模式就是根据不同的业务需求,选择合适的策略实现功能。

三、代码展示

定义一个策略接口

public interface StrategyInterface {

    String hellcWorld();

}

两个策略类实现这个策略接口

策略类1
@Component
public class StrategyOneImpl implements Strategy {
    @Override
    public String hellcWorld() {
        return "Hello World ! This is Entrance One.";
    }
}
策略类2
@Component
public class StrategyTwoImpl implements Strategy {
    @Override
    public String hellcWorld() {
        return "Hello World ! This is Entrance Two.";
    }
}

Service注入策略集合,根据entranceCode获取对应的策略

@Service
public class StrategyServiceImpl implements StrategyService {

    @Autowired
    private List StrategyModeInterfaces;

    @Override
    public String helloWorld(String entranceCode) {

        for (Strategy strategyModeInterface : StrategyModeInterfaces) {

            String daoName = strategyModeInterface.getClass().getSimpleName(); //获取实现策略接口的子类名称
            if(entranceCode.equals(daoName)){
                return strategyModeInterface.hellcWorld();
            }
        }
        return "Not Found";
    }
}

Controller调用helloWorld方法

@RestController
public class StrategyController {

    @Autowired
    private StrategyService strategyService;

    @RequestMapping("helloWorld/{entranceCode}")
    public String helloWorld(@PathVariable String entranceCode){
        return strategyService.helloWorld(entranceCode);
    }
}

启动服务,浏览器验证
在这里插入图片描述
在这里插入图片描述

四、总结

策略模式可以简单理解为小学生写作业,他可以一次性把作业写完,也可以分很多次写,根据不同的实际情况制定不同的策略;纵使策略模式优点很突出,但它的缺点也不可忽视,由于策略模式每一种策略都要封装成一个实现类,当策略过多的时候就会显得很臃肿,建议大家合理的运用设计模式,根据合适的应用场景选择合适的设计模式,这何尝又不是一种策略呢。

你可能感兴趣的:(Java设计模式 — 策略模式(Spring Boot + 策略模式))