广告
返回顶部
首页 > 资讯 > 后端开发 > Python >浅谈用SpringBoot实现策略模式
  • 290
分享到

浅谈用SpringBoot实现策略模式

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

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

摘要

目录问题的提出策略模式代码的实现进一步的思考心得体会问题的提出 阅读别人代码的时候最讨厌遇到的就是大段大段的if-else分支语句,一般来说读到下面的时候就忘了上面在判断什么了。很

问题的提出

阅读别人代码的时候最讨厌遇到的就是大段大段的if-else分支语句,一般来说读到下面的时候就忘了上面在判断什么了。很多资料上都会讲到使用策略模式来改进这种代码逻辑。

策略模式的类图如下:

只需要按照这个图写代码就可以了。

策略模式代码的实现

借助spring框架我们能够轻松的实现策略模式。

举一个简单的例子,我们去咖啡店买咖啡的时候,会根据自己的喜好和胃容量选择大小杯。那么我们就要实现一个CoffeeStategy:


package com.example.demo.strategy;

public interface CoffeeStrategy {
    void offer();
}

接下来就是各种具体策略的实现了,以中杯咖啡为例:


package com.example.demo.strategy;

import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Component;

@Component("MID")
@Slf4j
public class MidCoffee implements CoffeeStrategy {
    @Override
    public void offer() {
        log.info("你的中杯咖啡");
    }
}

用Component注解给这个类起一个名字叫做MID,这个在后面的应用上下文中有起效。现在就开始定义应用上下文类:


package com.example.demo.strategy;

import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.Map;

@Service
public class CoffeeContext {
    @Autowired
    private Map<String, CoffeeStrategy> coffeeStrategyMap;

    public void getCoffee(String size) {
        this.coffeeStrategyMap.get(size).offer();
    }
}

因为是使用了Spring框架,所有的Bean都被Spring自行管理,启动之后,Map中会有两个元素:{"MID":MidCoffee}和{"LARGE":LargeCoffee}。在具体的业务逻辑中,只需要引入应用上下文类,每次使用getCoffee方法就可以了。

比如这个Controller方法:


@GetMapping("/get")
    public void getCoffee(@Param("size") String size) {
        this.coffeeContext.getCoffee(size);
    }

请求这个接口,我们能在后台看到具体的日志内容:

2021-09-30 22:46:32.550  INFO 15628 --- [NIO-8099-exec-1] com.example.demo.strategy.LargeCoffee    : 您的大杯咖啡
2021-09-30 22:46:39.201  INFO 15628 --- [nio-8099-exec-7] com.example.demo.strategy.LargeCoffee    : 您的大杯咖啡

进一步的思考

之前写过Component中起的名字有奇效。如果我们没有用Spring框架去实现策略模式,那么我们的代码要如何编写呢?

首先可以肯定的是策略接口和策略实现类是不需要变的。需要变的地方就是应用上下文了,因为不存在自动注入了。这段代码就会变成大致这样:


package com.example.demo.strategy;

public class CoffeeContext {

    CoffeeStrategy coffeeStrategy;
    public CoffeeContext(CoffeeStrategy coffeeStrategy) {
        this.coffeeStrategy = coffeeStrategy;
    }

    public void getCoffee() {
        this.coffeeStrategy.offer();
    }
}

这样,在实际使用的时候,我需要先新建一个具体的实现类对象,然后将这个对象传入策略应用上下文去。这种方式怎么看着都没有Spring的实现方式优雅。


CoffeeStrategy mid = new MidCoffee();
CoffeeContext context = new CoffeeContext(mid);
context.getCoffee();

在我实际改造代码的过程中我发现有些策略其实是一样的,只是个别参数不同罢了。我对接的是各个业务供应商,有些供应商的接口逻辑式样的,只是URL和USERNAME不一样罢了。于是好几个策略实现类的代码重复很严重,这个时候我使用了Java8开始提供的接口default方法。这种方法的好处就是能将这种一样的逻辑提取到interface中,只要实现类不重写,那么就会默认使用default方法。

这样改造之后,我的代码又精简了很多。

心得体会

在我接手现在这个项目代码的时候,之前的程序员将代码写的很直白,就是可以不用任何的设计,直接写逻辑。这也没错,可是用idea的时候会各种提示重复代码啊之类的,让人看着不开心。而且还有大量的if-else分支让人摸不着头脑。

在我大刀阔斧的改造之后,代码行数越来越少,但是可读性却越来越高。

此时我是比较理解GoF在设计模式这本书里提到的一句话,大致意思就是开发一个面向对象的程序并不简单。

到此这篇关于浅谈用SpringBoot实现策略模式的文章就介绍到这了,更多相关SpringBoot 策略模式内容请搜索编程网以前的文章或继续浏览下面的相关文章希望大家以后多多支持编程网!

--结束END--

本文标题: 浅谈用SpringBoot实现策略模式

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

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

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

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

下载Word文档
猜你喜欢
  • 浅谈用SpringBoot实现策略模式
    目录问题的提出策略模式代码的实现进一步的思考心得体会问题的提出 阅读别人代码的时候最讨厌遇到的就是大段大段的if-else分支语句,一般来说读到下面的时候就忘了上面在判断什么了。很...
    99+
    2022-11-12
  • 浅谈spring使用策略模式实现多种场景登录方式
     @Autowired注解可以帮我们自动注入我们想要的 Bean。 如果只是简单使用@Autowired会遇到spring IOC容器中一个接口有多个实现的情况,spring无法识别...
    99+
    2022-11-12
  • SpringBoot策略模式的实践使用
    目录前言实践使用总结优点:缺点:前言 在实际业务代码中,我们经常会碰到这样的代码: String type = actualService.getRealtype(uid); ...
    99+
    2022-11-12
  • Springboot中实现策略模式+工厂模式的方法
      策略模式和工厂模式相信大家都比较熟悉,但是大家有没有在springboot中实现策略和工厂模式   具体策略模式和工厂模式的UML我就不给出来了,使用这个这两个模式主要是防止程序...
    99+
    2022-11-13
  • C#实现策略模式
    场景:有一个喜欢吃饺子,他有三种不同的方式去吃,蒸饺子,煮饺子,煎饺子,想要用策略模式来设计这个场景,怎么弄? 1.复习简单工厂模式 具体的代码: EatMethod.cs pub...
    99+
    2022-11-13
  • 怎样用Javascript实现策略模式
    目录概述代码实现总结概述 策略模式是JavaScript设计模式中行为型的设计模式; 定义: 定义一系列算法,并将这些算法各自封装成策略类(方法),然后将不变的部分和变化的部分分离开...
    99+
    2022-11-12
  • 怎么实现php策略模式
    小编给大家分享一下怎么实现php策略模式,相信大部分人都还不怎么了解,因此分享这篇文章给大家参考一下,希望大家阅读完这篇文章后大有收获,下面让我们一起去了解一下吧! 策略模式:就是把算法和对象分离...
    99+
    2022-10-19
  • Java策略模式怎么实现
    这篇文章主要介绍“Java策略模式怎么实现”,在日常操作中,相信很多人在Java策略模式怎么实现问题上存在疑惑,小编查阅了各式资料,整理出简单好用的操作方法,希望对大家解答”Java策略模式怎么实现”的疑惑有所帮助!接下来,请跟着小编一起来...
    99+
    2023-06-02
  • java策略模式如何实现
    本篇内容介绍了“java策略模式如何实现”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成! 刘备要到江东娶老婆了,走之前诸葛亮给赵云(...
    99+
    2023-06-19
  • 如何使用Spring实现策略模式
    本篇内容介绍了“如何使用Spring实现策略模式”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!Spring 中 @Autowired注解,大...
    99+
    2023-06-27
  • 浅谈Springboot实现拦截器的两种方式
    目录一、拦截器方式1、配置HandlerInterceptor2、注册拦截器3、使用拦截器的坑二、过滤器方式1、实现Filter接口2、使用过滤器需要注意的实现过滤请求有两种方式: ...
    99+
    2022-11-12
  • JavaScript中怎么实现策略模式
    今天就跟大家聊聊有关JavaScript中怎么实现策略模式,可能很多人都不太了解,为了让大家更加了解,小编给大家总结了以下内容,希望大家根据这篇文章可以有所收获。策略模式:定义了一系列家族算法,并对每一种算...
    99+
    2022-10-19
  • Java中如何实现策略模式
    这篇文章给大家分享的是有关Java中如何实现策略模式的内容。小编觉得挺实用的,因此分享给大家做个参考,一起跟随小编过来看看吧。这里设计了一个有关足球的场景,在进攻当中暂分为传球和射门两个动作。最开始你可能会这样想,设计一个抽象类(Attac...
    99+
    2023-06-17
  • Android中怎么实现策略模式
    Android中怎么实现策略模式,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。策略模式一个功能的效果,有不同的算法与策略,根据不同的选择选择不同的结果。简单来说,只要你写过...
    99+
    2023-05-30
    android
  • java设计模式之策略模式怎么实现
    这篇文章主要介绍了java设计模式之策略模式怎么实现,具有一定借鉴价值,感兴趣的朋友可以参考下,希望大家阅读完这篇文章之后大有收获,下面让小编带着大家一起了解一下。策略模式:策略模式是一种定义一系列算法的方法,算法完成的工作都是相同的工作,...
    99+
    2023-05-31
    java
  • java策略设计模式怎么实现
    在Java中实现策略设计模式,可以按照如下步骤进行:1. 定义一个策略接口(或者抽象类),该接口包含多个具体策略类共同的方法。2. ...
    99+
    2023-08-31
    java
  • 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
软考高级职称资格查询
编程网,编程工程师的家园,是目前国内优秀的开源技术社区之一,形成了由开源软件库、代码分享、资讯、协作翻译、讨论区和博客等几大频道内容,为IT开发者提供了一个发现、使用、并交流开源技术的平台。
  • 官方手机版

  • 微信公众号

  • 商务合作