iis服务器助手广告广告
返回顶部
首页 > 资讯 > 后端开发 > Python >SpringBoot策略模式的实践使用
  • 861
分享到

SpringBoot策略模式的实践使用

2024-04-02 19:04:59 861人浏览 安东尼

Python 官方文档:入门教程 => 点击学习

摘要

目录前言实践使用总结优点:缺点:前言 在实际业务代码中,我们经常会碰到这样的代码: String type = actualService.getRealtype(uid);

前言

在实际业务代码中,我们经常会碰到这样的代码:


String type = actualService.getRealtype(uid);
if(type.equals("typeA")){
    // do func A
}else if(type.equals("typeB")){
    // do func B
}else if(type.equals("typeC")){
    // do func C
}else[
   //...
}

这种 if-else 或者 switch-case 代码在每个分支都会判断分支类型,然后执行不同的方法获取结果,当代码分支比较少并且确定不会增加时,使用这种方式也是完全 ok 的,但是当分支比较多,并且后面可能会增加分支判断条件时,这种方式就违反了单一职责和开闭原则,因此对于我们开发工作中遇到这种情况,首先想到的是应该去优化这种代码中的“坏味道”,其中的方法之一就是考虑能不能用策略模式去重写,将代码和业务逻辑解耦,这样才有利于后续的维护工作。

策略模式,简单来说就是通过实现接口来重写不同的方法,从而通过上下文自动获取选择的策略方法并执行。

实践使用

以下基于 SpringBoot 的依赖注入实现策略模式。假设场景如下:某个客户需要订购多个资源,每个资源在不同资源池中,不同资源池下的资源也都不一样,在此处把原始的 if-else 代码逻辑优化为策略模式。

首先我们实现一个 ResourceStrategy 接口,并定义选择资源的抽象方法:


public interface ResourceStrategy {
    String orderInfORMation(String id);
}

然后根据 if-else 中的判断条件,构造三个资源类实现 ResourceStrategy 接口:


@Component("A")
public class ResourceA implements ResourceStrategy {
   @override
   public String orderInformation(String id){
      System.out.println("策略选择:Strategy A");
      return "A";
   }
}

@Component("B")
public class ResourceB implements ResourceStrategy {
   @override
   public String orderInformation(String id){
      System.out.println("策略选择:Strategy B");
      return "B";
   }
}

@Component("C")
public class ResourceC implements ResourceStrategy {
   @override
   public String orderInformation(String id){
      System.out.println("策略选择:Strategy C");
      return "C";
   }
}

注意其中每个类都需要标注策略类别名称。

然后我们需要写一个 SimpleContext 类来存储我们的策略类别,这时候就用到了 spring 的依赖注入和自动发现。


@Service
public class SimpleContextService {
    @Autowired
    private final Map<String, Strategy> strategyMap = new ConcurrentHashMap<>();
 
    public SimpleContext(Map<String, ResourceStrategy > strategyMap) {
        this.strategyMap.clear();
        strategyMap.forEach(strategyMap::put);
    }
 
    public String getResource(String poolId){
        return strategyMap.get(poolId).orderInformation(poolId);
    }
}

接下来就是我们的实际调用场景了~,如下:


@RestController
@RequestMapping("/test")
public class TestController {
    @Autowired
    private SimpleContextService contextService;
 
    @GetMapping("/choose")
    public String choose(@RequestParam String poolId){
        return simpleContext.getResource(poolId);
    }
 
}

那么当我们的入参 poolId 传入 “A” 时,返回的结果如下:


策略选择:Strategy A
A

同理,不同传参都会进入不同的策略执行方法。过这个简单的 demo,就可以看到通过获取输入不同的资源池 id,可以自动的拿到不同的资源。
通过实践总结下来,使用策略模式的好处就是通过一个封装的上下文可以自由的切换不同的算法,省去多重判断,同时可以具有很好的扩展性。

总结

从上面可以看出,策略模式的优缺点十分明显,在我们实际的业务中,也需要看情况使用。

优点:

  • 策略模式符合开闭原则
  • 代码简洁,从上下文自动获取条件转移语句
  • 使用策略模式可以提高算法的保密性和安全

缺点:

  • 每个策略都需要单独实现一个类,当策略很多时,会产生大量的策略类,会使代码出现“膨胀”
  • 客户端必须知道所有的策略
  • 策略模式的一系列算法地位是平等的,是可以相互替换的,事实上构成了一个扁平的算法结构,也就是在一个策略接口下,有多个平等的策略算法,就相当于兄弟算法。而且在运行时刻只有一个算法被使用,这就限制了算法使用的层级,使用的时候不能被嵌套使用

以上就是SpringBoot策略模式的实践使用的详细内容,更多关于SpringBoot策略模式的使用的资料请关注编程网其它相关文章!

--结束END--

本文标题: SpringBoot策略模式的实践使用

本文链接: https://www.lsjlt.com/news/123356.html(转载时请注明来源链接)

有问题或投稿请发送至: 邮箱/279061341@qq.com    QQ/279061341

本篇文章演示代码以及资料文档资料下载

下载Word文档到电脑,方便收藏和打印~

下载Word文档
猜你喜欢
  • SpringBoot策略模式的实践使用
    目录前言实践使用总结优点:缺点:前言 在实际业务代码中,我们经常会碰到这样的代码: String type = actualService.getRealtype(uid); ...
    99+
    2022-11-12
  • 浅谈用SpringBoot实现策略模式
    目录问题的提出策略模式代码的实现进一步的思考心得体会问题的提出 阅读别人代码的时候最讨厌遇到的就是大段大段的if-else分支语句,一般来说读到下面的时候就忘了上面在判断什么了。很...
    99+
    2022-11-12
  • Springboot中实现策略模式+工厂模式的方法
      策略模式和工厂模式相信大家都比较熟悉,但是大家有没有在springboot中实现策略和工厂模式   具体策略模式和工厂模式的UML我就不给出来了,使用这个这两个模式主要是防止程序...
    99+
    2022-11-13
  • 实践讲解SpringBoot自定义初始化Bean+HashMap优化策略模式
    策略模式:定义了算法族,分别封装起来,让它们之间可以互相替换,此模式让算法的变化独立于使用算法的客户。 传统的策略模式一般是创建公共接口、定义公共方法——》然后创建实体类实现公共接口...
    99+
    2022-11-12
  • 如何使用Spring实现策略模式
    本篇内容介绍了“如何使用Spring实现策略模式”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!Spring 中 @Autowired注解,大...
    99+
    2023-06-27
  • 怎样用Javascript实现策略模式
    目录概述代码实现总结概述 策略模式是JavaScript设计模式中行为型的设计模式; 定义: 定义一系列算法,并将这些算法各自封装成策略类(方法),然后将不变的部分和变化的部分分离开...
    99+
    2022-11-12
  • Android设计模式之策略模式怎么使用
    本篇内容主要讲解“Android设计模式之策略模式怎么使用”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“Android设计模式之策略模式怎么使用”吧!1、收到需求假设我们需要自定义的 View ...
    99+
    2023-07-05
  • Java怎么优雅的使用策略模式
    本篇内容介绍了“Java怎么优雅的使用策略模式”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!什么是策略模式策略模式是一种行为型模式,它将对象...
    99+
    2023-07-05
  • C++中的策略模式怎么实现
    本文小编为大家详细介绍“C++中的策略模式怎么实现”,内容详细,步骤清晰,细节处理妥当,希望这篇“C++中的策略模式怎么实现”文章能帮助大家解决疑惑,下面跟着小编的思路慢慢深入,一起来学习新知识吧。策略模式主要解决在有多种算法相似的情况下,...
    99+
    2023-07-05
  • javascript设计模式中的策略模式怎么实现
    这篇文章主要讲解了“javascript设计模式中的策略模式怎么实现”,文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习“javascript设计模式中的策略模式怎么实现”吧!一. 认识策略模式策略...
    99+
    2023-06-26
  • Java设计模式中的策略模式如何实现
    这篇文章主要介绍了Java设计模式中的策略模式如何实现的相关知识,内容详细易懂,操作简单快捷,具有一定借鉴价值,相信大家阅读完这篇Java设计模式中的策略模式如何实现文章都会有所收获,下面我们一起来看看吧。1 概述在平时开发中,往往会遇到这...
    99+
    2023-06-30
  • Java的策略模式用代码怎么实现
    这篇文章主要介绍“Java的策略模式用代码怎么实现”,在日常操作中,相信很多人在Java的策略模式用代码怎么实现问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Java的策略模式用代码怎么实现”的疑惑有所帮助!...
    99+
    2023-06-29
  • 详解Java如何优雅的使用策略模式
    目录什么是策略模式策略模式结构策略模式适用场景简单示例项目实战场景用一坨坨代码实现策略模式重构代码代码实现总结最近这段时间,想给大家分享一下设计模式的一些用法以及在项目中怎么运用。 ...
    99+
    2023-02-27
    Java优雅使用策略模式 Java使用策略模式 Java策略模式
  • Java 策略模式 if-else用法实例详解
    目录引言:策略模式comparable接口comparator接口不同的排序策略实现策略模式比if-else香在哪呢?有缺点吗?策略模式有哪些使用场景呢?有N多个策略怎么办?总结引言...
    99+
    2022-11-13
  • Java中常用的设计模式之策略模式详解
    目录优点缺点使用场景一、实现方式1、订单类型枚举类2、订单处理接口3、普通订单处理器4、秒杀订单处理器5、拼团订单处理器6、下单管理器二、测试1、引入依赖2、测试用例总结优点 1.算...
    99+
    2022-11-13
  • java 使用策略模式操作JDBC数据库
    java 使用策略模式操作JDBC数据库构造一个操作数据库的工具类,可以获得连接和释放连接public class DBUtil { private static Connection conn = null; static { /...
    99+
    2023-05-31
    java 策略模式 jdbc
  • 如何使用JavaScript策略模式校验表单
    目录概述未使用策略模式的表单校验使用策略模式优化策略模式的优点总结概述 Web项目中,登录,注册等等功能都需要表单提交,当把用户的数据提交给后台之前,前端一般要做一些力所能及的校验,...
    99+
    2022-11-12
  • 怎么使用JavaScript策略模式校验表单
    小编给大家分享一下怎么使用JavaScript策略模式校验表单,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧!javascript是一种什么语言javascript...
    99+
    2023-06-14
  • Spring boot 运用策略模式实现避免多次使用if
    目录前言环境配置实现目标准备策略接口和具体实现策略类支付策略接口微信支付策略类支付宝支付策略类准备支付策略上下文Context和支付策略工厂类支付策略工厂类支付策略枚举类支付策略上下...
    99+
    2022-11-13
  • JavaScript中策略模式的作用是什么
    本篇文章为大家展示了JavaScript中策略模式的作用是什么,内容简明扼要并且容易理解,绝对能使你眼前一亮,通过这篇文章的详细介绍希望你能有所收获。JavaScript是什么JavaScript是一种直译式的脚本语言,其解释器被称为Jav...
    99+
    2023-06-14
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作