千家信息网

SpringBoot结合策略模式的示例分析

发表于:2025-02-02 作者:千家信息网编辑
千家信息网最后更新 2025年02月02日,这篇文章主要介绍SpringBoot结合策略模式的示例分析,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!1. SpringBoot结合策略模式实战套路1.1. 前言我们都知道设
千家信息网最后更新 2025年02月02日SpringBoot结合策略模式的示例分析

这篇文章主要介绍SpringBoot结合策略模式的示例分析,文中介绍的非常详细,具有一定的参考价值,感兴趣的小伙伴们一定要看完!

1. SpringBoot结合策略模式实战套路

1.1. 前言

我们都知道设计模式好,可以让我们的代码更具可读性,扩展性,易于维护,但大部分程序猿一开始都学过至少一遍设计模式吧,实战中不知用到了几成。接下来让我介绍一个结合SpringBoot的策略模式套路,让你的代码少些if-else

1.2. 开撸

废话不多说,直接告诉你今天的核心是@autowired,看到这个是不是很熟悉,你每天都在用,不就是自动注入Spring管理的Bean吗?但我们对它的用法很多时候就局限在全局变量的注入了,忘记了,它其实还可以构造器注入,类型注入或命名注入,那么结合策略模式会绽放怎样的火花呢?跟着我的代码来看

1.2.1. 计算策略接口

/** * @author laoliangliang * @date 2019/10/28 10:10 */public interface CalculateStrategy {    int doOperation(int num1,int num2);}

1.2.2. 实现类

分别实现加减乘三个运算,可以看到我用了spring的注解@Component,也就是实例由spring管理了

@Componentpublic class AddOperation implements CalculateStrategy {    @Override    public int doOperation(int num1, int num2) {        return num1 + num2;    }}
@Componentpublic class SubstractOperation implements CalculateStrategy {    @Override    public int doOperation(int num1, int num2) {        return num1 - num2;    }}
@Componentpublic class MultiplyOperation implements CalculateStrategy {    @Override    public int doOperation(int num1, int num2) {        return num1 * num2;    }}

1.2.3. 上下文

之后创建上下文管理,用于提取策略。这个上下文才是本文的重点,注意到@autowired注解放的位置和对应的参数列表了吗?实际上它还可以注入到Map和List,Map的key就是它注入时的名,List则是存放全部实例对象

import com.google.common.base.Preconditions;import org.springframework.beans.factory.annotation.Autowired;import org.springframework.stereotype.Component;import org.springframework.util.StringUtils;import java.util.List;import java.util.Map;import java.util.concurrent.ConcurrentHashMap;/** * @author laoliangliang * @date 2019/10/28 10:14 */@Componentpublic class CalculatelOperationContext {//    @Autowired//    private Map strategyMap;    private final Map strategyMap = new ConcurrentHashMap<>();    @Autowired    public void stragegyInteface(Map strategyMap) {        this.strategyMap.clear();        strategyMap.forEach(this.strategyMap::put);        System.out.println(this.strategyMap);    }    @Autowired    public void stragegyInteface2(List strategyMap) {        strategyMap.forEach(System.out::println);    }    public CalculateStrategy strategySelect(String mode) {        Preconditions.checkArgument(!StringUtils.isEmpty(mode), "不允许输入空字符串");        return this.strategyMap.get(mode);    }}

打印结果:

{multiplyOperation=com.laoliang.springboot.pattern.strategy.MultiplyOperation@372ea2bc, addOperation=com.laoliang.springboot.pattern.strategy.AddOperation@4cc76301, substractOperation=com.laoliang.springboot.pattern.strategy.SubstractOperation@2f08c4b}com.laoliang.springboot.pattern.strategy.AddOperation@4cc76301com.laoliang.springboot.pattern.strategy.MultiplyOperation@372ea2bccom.laoliang.springboot.pattern.strategy.SubstractOperation@2f08c4b

可以看到Map中key,value的关系,key的默认值为类的第一个字母小写

1.2.4. 控制层

/** * @author laoliangliang * @date 2019/10/28 10:52 */@RestControllerpublic class StrategyController {    @Autowired    private CalculatelOperationContext calculatelOperationContext;    @RequestMapping(value = "/operation")    public String strategySelect(@RequestParam("mode") String mode) {        return String.valueOf(calculatelOperationContext.strategySelect(mode).doOperation(20, 5));    }}

启动SpringBoot,浏览器调用http://localhost:8080/operation?mode=multiplyOperation,结果100。模式可以选择另外两个addOperationsubstractOperation

我这里就做个演示,输入参数就写固定了,可以看到我们通过上下文calculatelOperationContext调用其方法strategySelect,通过不同的调用参数获得不同的策略,所以业务中只要可以抽象的方法都可以改写成这样的模式。

这种模式套路的好处就是当你要新增一种策略,比如除法,你不需要修改原来的代码,只要抽象不变,你新增一个DivideOperation类实现CalculateStrategy策略接口加上Spring注解即可,调用时模式修改为divideOperation就可以实现调用了。

以上是"SpringBoot结合策略模式的示例分析"这篇文章的所有内容,感谢各位的阅读!希望分享的内容对大家有帮助,更多相关知识,欢迎关注行业资讯频道!

模式 策略 上下 代码 上下文 参数 套路 就是 注解 管理 示例 分析 不同 内容 实例 实战 接口 方法 篇文章 结果 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 2017年8月网络安全 世界银行数据库官网怎么登录 武汉国家网络安全培训基地 网络技术监管图片 网络安全法规定 给他人 商丘市网络安全教育知识 服务器系统不释放内存 郑州金山云网络技术公司电话 麻将软件开发服务放心可靠 启明星辰网络安全审计 欧姆龙dm区数据库 迪肯大学网络安全专业有哪些 游戏软件开发厂家 计算机网络技术能做的工作 永兴学电脑软件开发多少钱一个月 梅州通信软件开发销售厂 VS2017软件开发的书 网络技术考研的含金量 能源软件开发招标公告 网络安全法实施后处罚案例 关于网络安全的小故事 浙江网络安全资讯技术提升快 图书馆数据库每年花费 天津智慧社区管理平台软件开发 客户数据库的建立与应用 学linux服务器哪本书好 沧州昊宇网络技术合法吗 浙江ntp网络时钟服务器设置 超市数据库软件 易晟源集团软件开发公司
0