最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

實踐講解SpringBoot自定義初始化Bean+HashMap優(yōu)化策略模式

 更新時間:2021年09月17日 16:25:51   作者:Simpleeee  
本篇講解了SpringBoot自定義初始化Bean+HashMap優(yōu)化策略模式,通過實踐的方式更通俗易懂,對此不了解的同學跟著小編往下看吧

策略模式:定義了算法族,分別封裝起來,讓它們之間可以互相替換,此模式讓算法的變化獨立于使用算法的客戶。

傳統(tǒng)的策略模式一般是創(chuàng)建公共接口、定義公共方法——》然后創(chuàng)建實體類實現(xiàn)公共接口、根據(jù)各自的邏輯重寫公共方法——》創(chuàng)建一個行為隨著策略對象改變而改變的 context 對象——》根據(jù)不同的傳參,調(diào)用不同的接口實現(xiàn)類方法,達到只改變參數(shù)即可獲得不同結(jié)果的目的。

但是也可以明顯發(fā)現(xiàn),這種策略模式的實現(xiàn)方式,代碼量較大,而且還要自定義要傳遞的參數(shù),可能會引入一定數(shù)量的if/else,有一定的優(yōu)化空間,接下來,我會結(jié)合實際開發(fā)經(jīng)驗,分享一種策略模式的優(yōu)化方式,進一步優(yōu)化代碼結(jié)構(gòu)、減少代碼量。

首先,必不可少的需要創(chuàng)建公共接口、定義公共方法,然后創(chuàng)建實體類實現(xiàn)公共接口、根據(jù)各自的邏輯重寫公共方法,參考代碼如下:

定義公共接口CommonService,以及公共方法push()

package com.itcq.service.StrategyPattern;
 
public interface CommonService {
    String push(String key);
}

創(chuàng)建三個不同的接口實現(xiàn)類,重寫push()方法

package com.itcq.service.StrategyPattern;
import org.springframework.stereotype.Service;

@Service
public class TestOne implements CommonService {
    @Override
    public String push(String key) {
        return "1.這是模式:" + key;
    }
}
package com.itcq.service.StrategyPattern;

import org.springframework.stereotype.Service;

@Service
public class TestTwo implements CommonService{
    @Override
    public String push(String key) {
        return "2.這是模式:"+key;
    }
}
package com.itcq.service.StrategyPattern;
import org.springframework.stereotype.Service;

@Service
public class TestThree implements CommonService{
    @Override
    public String push(String key) {
        return "3.這是模式:"+key;
    }
}

接下來就是重點,我們利用到springboot初始化Bean的方式結(jié)合HashMap,來實現(xiàn)對策略模式的優(yōu)化

@Service
public class TestServiceTwo implements InitializingBean {

    @Autowired
    private ApplicationContext applicationContext;

    private HashMap<String, CommonService> hashmap = new HashMap<>();

    @Override
    public void afterPropertiesSet() {

        hashmap.put(StrategyTestEnum.STRATEGY_ONE.getTitle(), new TestOne());
        hashmap.put(StrategyTestEnum.STRATEGY_TWO.getTitle(), this.applicationContext.getBean(TestTwo.class));
        hashmap.put(StrategyTestEnum.STRATEGY_THREE.getTitle(), this.applicationContext.getBean(TestThree.class));
    }
}
@Getter
public enum StrategyTestEnum {
    STRATEGY_ONE("一", "模式一"),
    STRATEGY_TWO("二", "模式二"),
    STRATEGY_THREE("三", "模式三"),
    ;

    private String title;
    private String value;

    StrategyTestEnum(String title, String value) {
        this.title = title;
        this.value = value;
    }
}

TestServiceTwo實現(xiàn)InitializingBean接口,InitializingBean接口為bean提供了初始化方法的方式,它只包括afterPropertiesSet方法,凡是繼承該接口的類,在初始化bean的時候都會執(zhí)行該方法。

定義一個hashmap集合,用來保存不同的公共接口實現(xiàn)類對象,這里把參數(shù)抽取成一個枚舉類,利用SpringBoot的高級容器ApplicationContext,獲取Bean對象,當然這里直接new一個實現(xiàn)類對象也是可以的,將不同的參數(shù)和實現(xiàn)對象封裝到map集合中,實現(xiàn)參數(shù)和邏輯一一對應(yīng)。

測試方法如下,通過hashmap的key獲取對應(yīng)的實現(xiàn)類對象,這樣就不必再自定義參數(shù)類型,徹底消除了if/else,也不用暴露給方法調(diào)用者過多的業(yè)務(wù)邏輯。

public String testMethod2(String key) {

        CommonService commonService = hashmap.get(key);
        Assert.notNull(commonService, "參數(shù)錯誤,找不到模式");
        return commonService.push(key);
    }

最后在controller層調(diào)用方法,進行測試:

@Autowired
    private TestServiceTwo testServiceTwo;

    @GetMapping("/test/two")
    public String testMethodTwo(@RequestParam(name = "key") String key) {

        return testServiceTwo.testMethod2(key);
    }

測試結(jié)果如下:

參數(shù)正確情況下:

參數(shù)錯誤情況下:

利用這種自定義初始化bean+hashmap的方式完成了對策略模式的優(yōu)化,優(yōu)化了代碼的結(jié)構(gòu),并且徹底消除了if/else,個人認為可以很好地提升代碼質(zhì)量。

代碼改變世界

到此這篇關(guān)于實踐講解SpringBoot自定義初始化Bean+HashMap優(yōu)化策略模式的文章就介紹到這了,更多相關(guān)SpringBoot Bean HashMap優(yōu)化策略內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • JavaFx?Tooltip懸浮提示使用及自定義代碼詳解

    JavaFx?Tooltip懸浮提示使用及自定義代碼詳解

    本篇是基于TornadoFx框架對Tooltip組件進行講解,使用Kotlin語言,和傳統(tǒng)Java使用有所區(qū)別,本章節(jié)包括對tooltip的樣式定制化以及指定窗口顯示,對JavaFx?Tooltip懸浮提示使用及自定義相關(guān)知識感興趣的朋友一起看看吧
    2021-12-12
  • listview點擊無效的處理方法(推薦)

    listview點擊無效的處理方法(推薦)

    下面小編就為大家?guī)硪黄猯istview點擊無效的處理方法(推薦)。小編覺得挺不錯的,現(xiàn)在就分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2017-05-05
  • kettle中使用js調(diào)用java類的方法

    kettle中使用js調(diào)用java類的方法

    這篇文章主要介紹了kettle中使用js調(diào)用java類的方法,本文講解了注意事項和調(diào)用語法,需要的朋友可以參考下
    2015-05-05
  • SpringBoot一個請求的處理全過程分享

    SpringBoot一個請求的處理全過程分享

    本文詳細介紹了SpringBoot請求處理的全過程,包括過濾器鏈、攔截器鏈、路徑映射、參數(shù)綁定、Controller方法執(zhí)行、返回值處理、異常解析和視圖解析渲染等步驟,同時,文中還列舉了請求處理過程中常見的問題及解決方案
    2024-12-12
  • Java?JDBC使用入門講解

    Java?JDBC使用入門講解

    JDBC是指Java數(shù)據(jù)庫連接,是一種標準Java應(yīng)用編程接口(?JAVA?API),用來連接?Java?編程語言和廣泛的數(shù)據(jù)庫。從根本上來說,JDBC?是一種規(guī)范,它提供了一套完整的接口,允許便攜式訪問到底層數(shù)據(jù)庫,本篇文章我們來了解MySQL連接JDBC的流程方法
    2022-12-12
  • idea生成WebServices接口的完整流程步驟

    idea生成WebServices接口的完整流程步驟

    因為工作需要,數(shù)據(jù)傳輸部分需要使用webservice實現(xiàn),經(jīng)過兩天的研究,實現(xiàn)了一個簡單的例子,這篇文章主要給大家介紹了關(guān)于idea生成WebServices接口的完整流程步驟,需要的朋友可以參考下
    2024-08-08
  • 利用Spring Cloud Config結(jié)合Bus實現(xiàn)分布式配置中心的步驟

    利用Spring Cloud Config結(jié)合Bus實現(xiàn)分布式配置中心的步驟

    這篇文章主要介紹了利用Spring Cloud Config結(jié)合Bus實現(xiàn)分布式配置中心的相關(guān)資料,文中通過示例代碼將實現(xiàn)的步驟一步步介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友下面來一起看看吧
    2018-05-05
  • 深入了解java 8的函數(shù)式編程

    深入了解java 8的函數(shù)式編程

    函數(shù)式編程并不是Java新提出的概念,其與指令編程相比,強調(diào)函數(shù)的計算比指令的計算更重要;與過程化編程相比,其中函數(shù)的計算可以隨時調(diào)用。下面我們來詳細了解一下吧
    2019-06-06
  • 解決?IDEA?Maven?項目中"Could?not?find?artifact"?問題的常見情況和解決方案

    解決?IDEA?Maven?項目中"Could?not?find?artifact"?

    這篇文章主要介紹了解決IDEA Maven項目中Could not?find?artifact問題的常見情況和解決方案,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2023-07-07
  • 淺析Java虛擬機詳解之概述、對象生存法則

    淺析Java虛擬機詳解之概述、對象生存法則

    這篇文章主要介紹了Java虛擬機詳解之概述、對象生存法則,本文給大家介紹的非常詳細,對大家的學習或工作具有一定的參考借鑒價值,需要的朋友可以參考下
    2021-04-04

最新評論

安福县| 海林市| 安新县| 邵武市| 西安市| 耒阳市| 新安县| 海林市| 浦北县| 贵阳市| 赤城县| 嘉定区| 新安县| 云安县| 分宜县| 柘城县| 天祝| 丰镇市| 南陵县| 丽江市| 扬州市| 红河县| 卓资县| 孝感市| 丹棱县| 潜山县| 宁强县| 精河县| 拉孜县| 永春县| 新绛县| 织金县| 遂平县| 巴中市| 兴和县| 宁城县| 霞浦县| 昌图县| 依安县| 汉寿县| 旌德县|