springboot工厂模式解决if_else流程和问题点解决

这篇具有很好参考价值的文章主要介绍了springboot工厂模式解决if_else流程和问题点解决。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一、主要问题点

spring中的Bean由IOC容器进行管理,和普通工厂的区别就是springboot中的类不能通过自己New出来使用,如果通过new写入到工厂,涉及到相关实现类调用其他Service(该service在正确情况下正常注入),注入的Service也会报错异常Null,也就是工厂注入失败。

二、解决和核心

工厂中的相关Bean也通过Springboot中容器注入。
核心代码在工厂中的Map加入@Autowired注解,由该注解依赖注入相关Service。
配合实现类中@Service(“参数”)使用,该参数即是Map中的String。

@Autowired
//Map String表示任务类型,FactoryService表示对应的接口。
private Map<String, FactoryService> taskTypeMap = new HashMap<>();

三、案例

1、创建一个接口,该接口根据不同的任务类型获取对应的策略。

子类实现该策略接口,不通的子类实现不同的策略方法。

/**
 * @Author guaiYiBug
 * @Description: 工厂接口类.
 * 根据不同的任务获取对应的策略(一个时间的逻辑判断)
 * @Date: 2023/3/6 16:59
 */
public interface TaskTimeFactoryService {

    /**
    *@Description: 获取任务时间逻辑判断
    *@Param: [routine]
    *@return: 返回一个判断好的数据实体
    *@Author: guaiYiBug
    *@date: 2023/3/8 9:35
    **/
    PlanAndPortTime getTaskTime(RoutintAndWoResp routine);
    

2、根据任务类型分别创建实现类。

使用注解@Service(“参数”)注入。该参数对应后续的工厂中的Map,根据该参数即可 获取到对应的实现类。

2.1 实现类1——dt实现类,也就是dt对应的策略。

@Slf4j
@Service("dt")
public class TaskTimeFactoryServiceByDtImpl implements TaskTimeFactoryService {
    @Autowired
    private WechatAppletService wechatAppletService;

    @Override
    public PlanAndPortTime getTaskTime(RoutintAndWoResp routine) {
        //Do something,和普通实现类没区别
        return null;
    }
}

2.1 实现类2——hh实现类,也就是hh对应的策略。

@Slf4j
@Service("hh")
public class TaskTimeFactoryServiceByHhImpl implements TaskTimeFactoryService {
    @Autowired
    private WechatAppletService wechatAppletService;

    @Override
    public PlanAndPortTime getTaskTime(RoutintAndWoResp routine) {
        //Do something,和普通实现类没区别
        return null;
    }
}

2.3 其他实现类都一样,就省略了,注意@Service(“类型”),该参数对应着任务类型。文章来源地址https://www.toymoban.com/news/detail-405896.html

3、创建工厂类

/**
 * @Author guaiYiBug
 * @Description: 将不同的任务类型放入到Map,
 * key为任务类型,value为具体实现类
 * @Date: 2023/3/6 17:07
 */
@Component
public class TaskTypeFactory {
    /**
     *  @Autowired用依赖注入引入 TaskTimeFactoryService 任务实现类,
     * 以 Bean 名称作为 Map 的 Key,以 Bean 实现类作为 Value
     * 配合 TaskTimeFactoryService上的注解使用,
     */
    @Autowired
    private Map<String, TaskTimeFactoryService> taskTypeMap = new HashMap<>();

    /**
    *@Description: 查找对应任务的处理实现类
    *@Param: [taskType]
    *@return: askTimeFactoryService
    *@Author: guaiYiBug
    *@date: 2023/3/8 9:13
    **/
    public  TaskTimeFactoryService getTaskType(String taskType){
        return taskTypeMap.get(taskType);
    }
}

4、工厂调用,入参任务类型,工厂中获取到对应的策略实现类。

//1、注入工厂
@Autowired
private TaskTypeFactory taskTypeFactory;

//2、工厂调用,获取到对应的策略实现类接口。
//taskType为dt、hh等@Service("")中的注解,自动加入到容器首字母会小写化。
TaskTimeFactoryService timeFactory = taskTypeFactory.getTaskType(taskType);
//3、接口调用实现方法
PlanAndPortTime planAndPortTime= timeFactory.getTaskTime(routineResp);

到了这里,关于springboot工厂模式解决if_else流程和问题点解决的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 告别if else!试试这款轻量级流程引擎吧,跟SpringBoot绝配!

    之前同事用了一款轻量级的规则引擎脚本 AviatorScript ,我也跟着用了起来,真的挺香,能少写很多代码。这期就给大家介绍一下这款规则引擎。 AviatorScript 是一门高性能、轻量级寄宿于 JVM (包括 Android 平台)之上的脚本语言。 它起源于2010年,作者对当时已有的一些产品不是

    2024年02月13日
    浏览(48)
  • 使用枚举 代替简单工厂的switch或者if else

    我们常常会有这样的需求,根据传入参数的不同调用不同的方法,返回不同的值,这个时候大家就会想到使用策略模式,但是使用大量的switch或者if else 代码会很不优雅,下边我来说两个优雅的实现方式 一,枚举 首先写一个公共接口,用来定义公共的实现方法     2.写一个枚

    2024年02月09日
    浏览(41)
  • 【零基础入门Python】Python If Else流程控制

    ✍ 面向读者:所有人 ✍ 所属专栏:零基础入门Python https://blog.csdn.net/arthas777/category_12455877.html Python if语句 Python if语句的流程图 Python if语句示例 Python If-Else Statement Python if else语句的流程图 使用Python if-else语句 列表理解中的Python if-else语句 Python中的嵌套If语句 Python嵌套if语句

    2024年02月05日
    浏览(39)
  • 设计模式:干掉if else的几种方法

    存在的问题: 如果业务逻辑过多 if else 可能要写多达几百行,这样代码可读性很差,不利于寻找bug和理解代码 如果if后面的判断逻辑过长,则代码可读性不强 如果将其写在一个核心代码里面,则新增功能时需要修改核心代码,要是不小心改到其他的代码就凉凉了 当业务逻辑

    2024年02月07日
    浏览(41)
  • 策略模式+Spring配置类优化多if..else思路

    场景: 假设设备上报不同类型的消息,我们要对不同类型的消息做不同的处理。如果我们通过if..else的方式处理的话会显得比较冗余。 例如: 那么对于不同消息的不同的处理逻辑我们可以单独放在一个实现类中,这些类有着相同的行为,所以我们可以定义一个接口: 针对于不

    2024年02月15日
    浏览(42)
  • 记录--卸下if-else 侠的皮衣!- 策略模式

    给我一个功能,我总是要写很多if-else,虽然能跑,但是维护起来确实很难受,每次都要在一个方法里面增加逻辑,生怕搞错,要是涉及到支付功能,分分钟炸锅 我总是不知道之前写的逻辑在哪里,一个方法几百行逻辑,而且是不同功能点冗余在一起!这可能让我牺牲大量时间

    2024年02月16日
    浏览(42)
  • 不需要策略模式也能避免满屏if/else

    java 复制代码 public static void main(String[] args) { int a = 1; if(a == 1){ System.out.println(\\\"执行a=1的逻辑\\\"); }else if (a == 2){ System.out.println(\\\"执行a=2的逻辑\\\"); }else if (a == 3){ System.out.println(\\\"执行a=3的逻辑\\\"); }else if (a == 4){ System.out.println(\\\"执行a=4的逻辑\\\"); }else if (a == 5){ System.out.println(\\\"执行a=5的逻辑

    2024年02月06日
    浏览(89)
  • 【状态模式】拯救if-else堆出来的屎山代码

    我想大家平时都在开发重都遇见过屎山代码,这些屎山代码一般都是由于复杂且庞大的if-else造成的,状态模式,是一种很好的优化屎山代码的设计模式,本文将采用两个业务场景的示例来讲解如何使用状态模式拯救屎山代码。 目录 前言 1.网购业务场景 1.1.需求 1.2.if else的实

    2024年02月12日
    浏览(40)
  • 设计模式第八讲:常见重构技巧 - 去除多余的if else

    最为常见的是代码中使用很多的if/else,或者switch/case;如何重构呢?方法特别多,本文是设计模式第八讲,带你学习其中的技巧。 通常业务代码会包含这样的逻辑:每种条件下会有不同的处理逻辑。比如两个数a和b之间可以通过不同的操作符(+,-,*,/)进行计算,初学者通

    2024年02月10日
    浏览(41)
  • 设计模式之【策略模式】,去掉繁琐的if-else,实现算法的动态替换

    全网最全最细的【设计模式】总目录,收藏起来慢慢啃,看完不懂砍我 策略模式(Strategy Pattern)又叫政策模式(Policy Pattern),它是将定义的算法家族分别封装起来,让它们之间可以互相替换,从而让算法的变化不会影响到使用算法的用户。属于行为型模式。 策略模式使用

    2024年02月09日
    浏览(44)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包