国产 无码 综合区,色欲AV无码国产永久播放,无码天堂亚洲国产AV,国产日韩欧美女同一区二区

springboot工廠模式解決if_else流程和問題點解決

這篇具有很好參考價值的文章主要介紹了springboot工廠模式解決if_else流程和問題點解決。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

一、主要問題點

spring中的Bean由IOC容器進行管理,和普通工廠的區(qū)別就是springboot中的類不能通過自己New出來使用,如果通過new寫入到工廠,涉及到相關(guān)實現(xiàn)類調(diào)用其他Service(該service在正確情況下正常注入),注入的Service也會報錯異常Null,也就是工廠注入失敗。

二、解決和核心

工廠中的相關(guān)Bean也通過Springboot中容器注入。
核心代碼在工廠中的Map加入@Autowired注解,由該注解依賴注入相關(guān)Service。
配合實現(xiàn)類中@Service(“參數(shù)”)使用,該參數(shù)即是Map中的String。

@Autowired
//Map String表示任務類型,F(xiàn)actoryService表示對應的接口。
private Map<String, FactoryService> taskTypeMap = new HashMap<>();

三、案例

1、創(chuàng)建一個接口,該接口根據(jù)不同的任務類型獲取對應的策略。

子類實現(xiàn)該策略接口,不通的子類實現(xiàn)不同的策略方法。

/**
 * @Author guaiYiBug
 * @Description: 工廠接口類.
 * 根據(jù)不同的任務獲取對應的策略(一個時間的邏輯判斷)
 * @Date: 2023/3/6 16:59
 */
public interface TaskTimeFactoryService {

    /**
    *@Description: 獲取任務時間邏輯判斷
    *@Param: [routine]
    *@return: 返回一個判斷好的數(shù)據(jù)實體
    *@Author: guaiYiBug
    *@date: 2023/3/8 9:35
    **/
    PlanAndPortTime getTaskTime(RoutintAndWoResp routine);
    

2、根據(jù)任務類型分別創(chuàng)建實現(xiàn)類。

使用注解@Service(“參數(shù)”)注入。該參數(shù)對應后續(xù)的工廠中的Map,根據(jù)該參數(shù)即可 獲取到對應的實現(xiàn)類。

2.1 實現(xiàn)類1——dt實現(xiàn)類,也就是dt對應的策略。

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

    @Override
    public PlanAndPortTime getTaskTime(RoutintAndWoResp routine) {
        //Do something,和普通實現(xiàn)類沒區(qū)別
        return null;
    }
}

2.1 實現(xiàn)類2——hh實現(xiàn)類,也就是hh對應的策略。

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

    @Override
    public PlanAndPortTime getTaskTime(RoutintAndWoResp routine) {
        //Do something,和普通實現(xiàn)類沒區(qū)別
        return null;
    }
}

2.3 其他實現(xiàn)類都一樣,就省略了,注意@Service(“類型”),該參數(shù)對應著任務類型。文章來源地址http://www.zghlxwxcb.cn/news/detail-405896.html

3、創(chuàng)建工廠類

/**
 * @Author guaiYiBug
 * @Description: 將不同的任務類型放入到Map,
 * key為任務類型,value為具體實現(xiàn)類
 * @Date: 2023/3/6 17:07
 */
@Component
public class TaskTypeFactory {
    /**
     *  @Autowired用依賴注入引入 TaskTimeFactoryService 任務實現(xiàn)類,
     * 以 Bean 名稱作為 Map 的 Key,以 Bean 實現(xiàn)類作為 Value
     * 配合 TaskTimeFactoryService上的注解使用,
     */
    @Autowired
    private Map<String, TaskTimeFactoryService> taskTypeMap = new HashMap<>();

    /**
    *@Description: 查找對應任務的處理實現(xiàn)類
    *@Param: [taskType]
    *@return: askTimeFactoryService
    *@Author: guaiYiBug
    *@date: 2023/3/8 9:13
    **/
    public  TaskTimeFactoryService getTaskType(String taskType){
        return taskTypeMap.get(taskType);
    }
}

4、工廠調(diào)用,入?yún)⑷蝿疹愋?,工廠中獲取到對應的策略實現(xiàn)類。

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

//2、工廠調(diào)用,獲取到對應的策略實現(xiàn)類接口。
//taskType為dt、hh等@Service("")中的注解,自動加入到容器首字母會小寫化。
TaskTimeFactoryService timeFactory = taskTypeFactory.getTaskType(taskType);
//3、接口調(diào)用實現(xiàn)方法
PlanAndPortTime planAndPortTime= timeFactory.getTaskTime(routineResp);

到了這里,關(guān)于springboot工廠模式解決if_else流程和問題點解決的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權(quán),不承擔相關(guān)法律責任。如若轉(zhuǎn)載,請注明出處: 如若內(nèi)容造成侵權(quán)/違法違規(guī)/事實不符,請點擊違法舉報進行投訴反饋,一經(jīng)查實,立即刪除!

領支付寶紅包贊助服務器費用

相關(guān)文章

  • 告別if else!試試這款輕量級流程引擎吧,跟SpringBoot絕配!

    告別if else!試試這款輕量級流程引擎吧,跟SpringBoot絕配!

    之前同事用了一款輕量級的規(guī)則引擎腳本 AviatorScript ,我也跟著用了起來,真的挺香,能少寫很多代碼。這期就給大家介紹一下這款規(guī)則引擎。 AviatorScript 是一門高性能、輕量級寄宿于 JVM (包括 Android 平臺)之上的腳本語言。 它起源于2010年,作者對當時已有的一些產(chǎn)品不是

    2024年02月13日
    瀏覽(34)
  • 使用枚舉 代替簡單工廠的switch或者if else

    我們常常會有這樣的需求,根據(jù)傳入?yún)?shù)的不同調(diào)用不同的方法,返回不同的值,這個時候大家就會想到使用策略模式,但是使用大量的switch或者if else 代碼會很不優(yōu)雅,下邊我來說兩個優(yōu)雅的實現(xiàn)方式 一,枚舉 首先寫一個公共接口,用來定義公共的實現(xiàn)方法 ? ? 2.寫一個枚

    2024年02月09日
    瀏覽(24)
  • 【零基礎入門Python】Python If Else流程控制

    【零基礎入門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日
    瀏覽(29)
  • 設計模式:干掉if else的幾種方法

    存在的問題: 如果業(yè)務邏輯過多 if else 可能要寫多達幾百行,這樣代碼可讀性很差,不利于尋找bug和理解代碼 如果if后面的判斷邏輯過長,則代碼可讀性不強 如果將其寫在一個核心代碼里面,則新增功能時需要修改核心代碼,要是不小心改到其他的代碼就涼涼了 當業(yè)務邏輯

    2024年02月07日
    瀏覽(20)
  • 策略模式+Spring配置類優(yōu)化多if..else思路

    策略模式+Spring配置類優(yōu)化多if..else思路

    場景: 假設設備上報不同類型的消息,我們要對不同類型的消息做不同的處理。如果我們通過if..else的方式處理的話會顯得比較冗余。 例如: 那么對于不同消息的不同的處理邏輯我們可以單獨放在一個實現(xiàn)類中,這些類有著相同的行為,所以我們可以定義一個接口: 針對于不

    2024年02月15日
    瀏覽(18)
  • 記錄--卸下if-else 俠的皮衣!- 策略模式

    記錄--卸下if-else 俠的皮衣!- 策略模式

    給我一個功能,我總是要寫很多if-else,雖然能跑,但是維護起來確實很難受,每次都要在一個方法里面增加邏輯,生怕搞錯,要是涉及到支付功能,分分鐘炸鍋 我總是不知道之前寫的邏輯在哪里,一個方法幾百行邏輯,而且是不同功能點冗余在一起!這可能讓我犧牲大量時間

    2024年02月16日
    瀏覽(16)
  • 不需要策略模式也能避免滿屏if/else

    不需要策略模式也能避免滿屏if/else

    java 復制代碼 public static void main(String[] args) { int a = 1; if(a == 1){ System.out.println(\\\"執(zhí)行a=1的邏輯\\\"); }else if (a == 2){ System.out.println(\\\"執(zhí)行a=2的邏輯\\\"); }else if (a == 3){ System.out.println(\\\"執(zhí)行a=3的邏輯\\\"); }else if (a == 4){ System.out.println(\\\"執(zhí)行a=4的邏輯\\\"); }else if (a == 5){ System.out.println(\\\"執(zhí)行a=5的邏輯

    2024年02月06日
    瀏覽(23)
  • 設計模式第八講:常見重構(gòu)技巧 - 去除多余的if else

    設計模式第八講:常見重構(gòu)技巧 - 去除多余的if else

    最為常見的是代碼中使用很多的if/else,或者switch/case;如何重構(gòu)呢?方法特別多,本文是設計模式第八講,帶你學習其中的技巧。 通常業(yè)務代碼會包含這樣的邏輯:每種條件下會有不同的處理邏輯。比如兩個數(shù)a和b之間可以通過不同的操作符(+,-,*,/)進行計算,初學者通

    2024年02月10日
    瀏覽(18)
  • 【狀態(tài)模式】拯救if-else堆出來的屎山代碼

    【狀態(tài)模式】拯救if-else堆出來的屎山代碼

    我想大家平時都在開發(fā)重都遇見過屎山代碼,這些屎山代碼一般都是由于復雜且龐大的if-else造成的,狀態(tài)模式,是一種很好的優(yōu)化屎山代碼的設計模式,本文將采用兩個業(yè)務場景的示例來講解如何使用狀態(tài)模式拯救屎山代碼。 目錄 前言 1.網(wǎng)購業(yè)務場景 1.1.需求 1.2.if else的實

    2024年02月12日
    瀏覽(17)
  • 設計模式之【策略模式】,去掉繁瑣的if-else,實現(xiàn)算法的動態(tài)替換

    設計模式之【策略模式】,去掉繁瑣的if-else,實現(xiàn)算法的動態(tài)替換

    全網(wǎng)最全最細的【設計模式】總目錄,收藏起來慢慢啃,看完不懂砍我 策略模式(Strategy Pattern)又叫政策模式(Policy Pattern),它是將定義的算法家族分別封裝起來,讓它們之間可以互相替換,從而讓算法的變化不會影響到使用算法的用戶。屬于行為型模式。 策略模式使用

    2024年02月09日
    瀏覽(23)

覺得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請作者喝杯咖啡吧~博客贊助

支付寶掃一掃領取紅包,優(yōu)惠每天領

二維碼1

領取紅包

二維碼2

領紅包