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管理了

@Component
public class AddOperation implements CalculateStrategy {@Overridepublic int doOperation(int num1, int num2) {return num1 + num2;}}@Component
public class SubstractOperation implements CalculateStrategy {@Overridepublic int doOperation(int num1, int num2) {return num1 - num2;}}@Component
public class MultiplyOperation implements CalculateStrategy {@Overridepublic 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*/
@Component
public class CalculatelOperationContext {//    @Autowired
//    private Map<String, CalculateStrategy> strategyMap;private final Map<String, CalculateStrategy> strategyMap = new ConcurrentHashMap<>();@Autowiredpublic void stragegyInteface(Map<String, CalculateStrategy> strategyMap) {this.strategyMap.clear();strategyMap.forEach(this.strategyMap::put);System.out.println(this.strategyMap);}@Autowiredpublic void stragegyInteface2(List<CalculateStrategy> 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@4cc76301
com.laoliang.springboot.pattern.strategy.MultiplyOperation@372ea2bc
com.laoliang.springboot.pattern.strategy.SubstractOperation@2f08c4b

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

1.2.4. 控制层

/*** @author laoliangliang* @date 2019/10/28 10:52*/
@RestController
public class StrategyController {@Autowiredprivate 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就可以实现调用了,耦合性大大降低,不需要再改原来那一坨自己都看不下去的代码了

1.3. 总结

可以看到全文中代码量还是相对比较少的,将不同的策略用不同的类实现,且可以不用改动别的代码,这篇文章你get到新套路了吗

接下来我争取每篇文章下都分享一套学习视频,希望你们喜欢!!
龙果学院 秒杀系统企业级实战应用(真实工业界案例)视频

springboot map数据类型注入_SpringBoot结合策略模式实战套路相关推荐

  1. springboot map数据类型注入_Spring Boot(五):春眠不觉晓,Mybatis知多少

    在JavaWeb项目开发中,我们使用最多的ORM框架可能就是Mybatis了,那么对于常用的mybatis,你究竟了解多少呢? 一 全局了解 1 Mybatis是什么 MyBatis 是支持定制化 S ...

  2. java策略模式实战示例

    现已放在gitee上,可以不下载直接参考一下即: https://gitee.com/zhang-xiao-xiang/zxx-pattern 日常碰到的业务概述 登录类型,支付类型,供应商渠道,不同 ...

  3. [设计模式] ------ 策略模式实战:java中替代if-else的大段逻辑

    java中用策略模式替代if-else的大段逻辑 问题: java本来是一门以面向对象为主的语言,但很多人嘴上说着java面向对象,然后除了表映射实体之外,其他的还是面向过程的思路. 就比如今天要说的 ...

  4. java策略模式实战

    项目:保险 场景:保险业务中涉及计费的问题,每种保险的计费策略不同,为了更好的代码维护,参考大神写的java策略模式后为选择了策略模式设计了编码方案. 涉及表: 产品方案表 业务简介: 每个保险产品对 ...

  5. 浅写策略模式,及map、枚举结合小例子

    import java.util.HashMap; import java.util.Map;public class Test1 {/*** 我在思考 为什么要用策略模式,只是对行为做一些封装,调用 ...

  6. Java设计模式之——策略模式

    策略模式的简单介绍 在软件开发中常常遇到这样的情况:实现某一个功能可以有多种算法或者策略,我们根据事件情况选择不同的算法或者策略来完成该功能.例如,排序算法,可以使用插入排序.归并排序.冒泡排序等. ...

  7. Head First设计模式之策略模式(Strategy)

    小白将从以下几点对策略模式进行解析 策略模式引入的设计技巧 策略模式的定义及类图 策略模式的优缺点 策略模式的应用场景 策略模式实战 总结 零.策略模式引入的技巧 先过一遍,放入脑海中,等看完后面所有 ...

  8. [设计模式] ------ 策略模式

    策略模式 它定义了算法家族,分别封装起来,让他们直接可以互相替换,此模式让算法的变化,不会影响到使用算法的客户 其实很简单,可能很多人都用到了,只不过还不知道这就是策略模式而已. 比如定义一个接口A, ...

  9. 别在再满屏的 if、else 了,试试策略模式,真香!!

    你还在写满屏的 if/ else/ switch 之类的判断逻辑吗? 栈长在开发人员的代码中看过太多这样的低级代码了,真的太 low,极不好维护,本文栈长就教你如何用策略模式干掉 if/ else/ ...

最新文章

  1. Hadoop中RPC协议小例子报错java.lang.reflect.UndeclaredThrowableException解决方法
  2. Spring Boot——开发新一代Spring Java应用
  3. 图片二:matplotlib、PIL、CV2操作图片
  4. 动态内存分配到底为谁分配内存空间【浅谈动态内存的一个实例】
  5. CF1479A Searching Local Minimum
  6. python设计一个动物类_我用Python实现了12500张猫狗图像的精准分类
  7. Oracle中start with xx connect by prior 语句解析
  8. 遇到了消息堆积,但是问题不大
  9. 算法竞赛中的输入输出框架
  10. 鸿蒙应用开发--组件
  11. ROS学习笔记13(测试一个简单的消息发布和消息订阅)
  12. 跨境电商ERP有哪些?
  13. Asp.NET MVC 技术参考:http://kb.cnblogs.com/zt/mvc/
  14. 《深度学习导论及案例分析》一2.5概率有向图模型
  15. 【COCOS2DX-LUA 脚本开发之十二】利用AssetsManager实现在线更新资源文件
  16. 安装VisualC++出现未安装等错误怎么办
  17. 服务器主板128G只显示出64G,[硬件维护]请教高手:新买的160G硬盘为什么分区后就只能显示128G?...
  18. Apache ECharts教程
  19. 看完左耳朵耗子的116篇文章,我给自己定了个5年技术规划
  20. 信息管理系统技术开发合同书(补充协议)模板

热门文章

  1. Scrapy爬取姓名大全,看看那个名字最受父母青睐
  2. 【opencv系列04】OpenCV4.X图形绘制
  3. 推荐 2 个用 VS Code 直接浏览 GitHub 代码!只需要 1s !
  4. 推荐 7 个学习 TypeScript 的宝库,2021 是时候给自己加薪了!
  5. 【Selenium】导出成py脚本的基础使用
  6. 浅析数据库case when 用法
  7. linux sed命令替换目标字符串所在行整行为给定值
  8. maven给默认中央仓库设置镜像为阿里云maven仓库并添加全局远程仓库
  9. kafka高性能揭秘:顺序写和零拷贝
  10. javap分析字符串拼接执行流程