iis服务器助手广告广告
返回顶部
首页 > 资讯 > 精选 >如何使用Spring实现策略模式
  • 248
分享到

如何使用Spring实现策略模式

2023-06-27 10:06:20 248人浏览 八月长安
摘要

本篇内容介绍了“如何使用spring实现策略模式”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!Spring 中 @Autowired注解,大

本篇内容介绍了“如何使用spring实现策略模式”的有关知识,在实际案例的操作过程中,不少人都会遇到这样的困境,接下来就让小编带领大家学习一下如何处理这些情况吧!希望大家仔细阅读,能够学有所成!

Spring 中 @Autowired注解,大家应该不会陌生,用过 Spring 的肯定也离不开这个注解,通过这个注解可以帮我们自动注入我们想要的 Bean。

除了这个基本功能之外,@Autowired 还有更加强大的功能,还可以注入指定类型的数组,List/Set 集合,甚至还可以是 Map 对象。

比如说当前应用有一个支付接口 PayService,分别需要对接支付宝、微信支付、银行卡,所以分别有三个不同实现类 AliPayService,WechatPayservice,BankCardPayService

如果此时我需要获取当前系统类所有 PayService Bean,老的方式我们只能通过 BeanFactory或者 ApplicationContext 获取。

// 首先通过 getBeanNamesForType 获取 PayService 类型所有的 BeanString[] names = ctx.getBeanNamesForType(PayService.class);List anotherPayService = Lists.newArrayList();for (String beanName : names) {    anotherPayService.add(ctx.getBean(beanName, PayService.class));}// 或者通过 getBeansOfType 获取所有 PayService 类型Map beansOfType = ctx.getBeansOfType(PayService.class);for (Map.Entry entry : beansOfType.entrySet()) {    anotherPayService.add(entry.getValue());}

但是现在我们可以不用这么麻烦了,我们可以直接使用 @Autowired 注入 PayService Bean 数组,或者 PayService List/Set 集合,甚至,我们还可以注入 PayService 的 Map 集合。

@AutowiredList payServices;@AutowiredPayService[] payServicesArray;

知道了这个功能,当我们需要使用 Spring 实现策略模式就非常简单。

可能有的小伙伴不太了解策略模式,没关系,这类阿粉介绍一个业务场景,通过这个场景给大家介绍一下策略模式。

还是上面的例子,我们当前系统需要对接微信支付、支付宝、以及银行卡支付。

当接到这个需求,我们首先需要拿到相应接口文档,分析三者的共性。

假设我们这里发现,三者模式比较类似,只是部分传参不一样。

所以我们根据三者的共性,抽象出一组公共的接口 PayService

public interface PayService {    PayResult epay(PayRequest request);}

然后分别实现三个实现类,都继承这个接口。

那么现在问题来了,由于存在三个实现类,如何选择具体的实现类?

其实这个问题很好解决,请求参数传入一个唯一标识,然后我们根据标识选择相应的实现类。

比如说我们在请求类 PayRequest 搞个 channelNo 字段,这个代表相应支付渠道唯一标识,比如说支付宝为:00000001,微信支付为 00000002,银行卡支付为 00000003

接着我们需要把唯一标识与具体实现类一一映射起来,刚好我们可以使用 Map 存储这种映射关系。

我们实现一个 RouteService,具体代码逻辑如下:

@Servicepublic class RouteService {    @Autowired    Map payServiceMap;    public PayResult epay(PayRequest payRequest) {        PayService payService = payServiceMap.get(payRequest.getChannelNo());        return  payService.epay(payRequest);    }}

我们在 RouteService 自动注入 PayService 所有相关 Bean,然后使用唯一标识查找实现类。

这样我们对外就屏蔽了支付渠道的差异,其他服务类只要调用 RouteService 即可。

但是这样实现还是有点小问题,由于我们唯一标识为一串数字,如果像我们上面直接使用 @Autowired注入 Map,这就需要我们实现类的 Bean 名字为 00000001 这些。

但是这样命名不是很优雅,这样会让后来同学很难看懂,不好维护。

所以我们需要做个转换,我们可以这么实现。

首先我们改造一下 PayService 这个接口,增加一个方法,每个具体实现类通过这个方法返回其唯一标识。

public interface PayService {    PayResult epay(PayRequest request);    String channel();}

具体举个支付宝实现类的代码,其他实现类实现类似。

@Service("aliPayService")public class AliPayService implements PayService {    @Override    public PayResult epay(PayRequest request) {        // 业务逻辑        return new PayResult();    }    @Override    public String channel() {        return "00000001";    }}

最后我们改造一下 RouteService,具体逻辑如下:

@Servicepublic class RouteService {    @Autowired    Set payServiceSet;        Map payServiceMap;    public PayResult epay(PayRequest payRequest) {        PayService payService = payServiceMap.get(payRequest.getChannelNo());        return  payService.epay(payRequest);    }    @PostConstruct    public void init() {        for (PayService payService : payServiceSet) {            payServiceMap = new HashMap();            payServiceMap.put(payService.channel(), payService);        }    }}

上面代码首先通过自动注入 PayService 一个集合,然后我们再将其转为一个 Map,这样内部存储刚好是唯一标识与实现类的映射了。

“如何使用Spring实现策略模式”的内容就介绍到这里了,感谢大家的阅读。如果想了解更多行业相关的知识可以关注编程网网站,小编将为大家输出更多高质量的实用文章!

--结束END--

本文标题: 如何使用Spring实现策略模式

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

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

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

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

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

  • 微信公众号

  • 商务合作