欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

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

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

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

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

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

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

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

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

創(chuàng)建三個(gè)不同的接口實(shí)現(xiàn)類(lèi),重寫(xiě)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;
    }
}

接下來(lái)就是重點(diǎn),我們利用到springboot初始化Bean的方式結(jié)合HashMap,來(lái)實(shí)現(xiàn)對(duì)策略模式的優(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實(shí)現(xiàn)InitializingBean接口,InitializingBean接口為bean提供了初始化方法的方式,它只包括afterPropertiesSet方法,凡是繼承該接口的類(lèi),在初始化bean的時(shí)候都會(huì)執(zhí)行該方法。

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

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

public String testMethod2(String key) {

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

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

@Autowired
    private TestServiceTwo testServiceTwo;

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

        return testServiceTwo.testMethod2(key);
    }

測(cè)試結(jié)果如下:

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

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

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

代碼改變世界

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

相關(guān)文章

  • Java中String類(lèi)的一些常見(jiàn)方法總結(jié)

    Java中String類(lèi)的一些常見(jiàn)方法總結(jié)

    這篇文章主要給大家介紹了關(guān)于Java中String類(lèi)的一些常見(jiàn)方法,文中包括了Java中String類(lèi)的基本概念、構(gòu)造方式、常用方法以及StringBuilder和StringBuffer的使用,涵蓋了字符串操作的各個(gè)方面,包括查找、轉(zhuǎn)換、比較、替換、拆分、截取等,需要的朋友可以參考下
    2024-11-11
  • java 實(shí)現(xiàn)數(shù)組擴(kuò)容與縮容案例

    java 實(shí)現(xiàn)數(shù)組擴(kuò)容與縮容案例

    這篇文章主要介紹了java 實(shí)現(xiàn)數(shù)組擴(kuò)容與縮容案例,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2021-02-02
  • springcloud如何用Redlock實(shí)現(xiàn)分布式鎖

    springcloud如何用Redlock實(shí)現(xiàn)分布式鎖

    本文主要介紹了springcloud如何用Redlock實(shí)現(xiàn)分布式鎖,文中通過(guò)示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下
    2021-11-11
  • Java如何求交集、并集、差集

    Java如何求交集、并集、差集

    這篇文章主要介紹了Java如何求交集、并集、差集問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-11-11
  • Java之String字符串在JVM中的存儲(chǔ)及其內(nèi)存地址的問(wèn)題

    Java之String字符串在JVM中的存儲(chǔ)及其內(nèi)存地址的問(wèn)題

    這篇文章主要介紹了Java之String字符串在JVM中的存儲(chǔ)及其內(nèi)存地址的問(wèn)題,具有很好的參考價(jià)值,希望對(duì)大家有所幫助,如有錯(cuò)誤或未考慮完全的地方,望不吝賜教
    2023-07-07
  • Jenkins忘記密碼密碼重置操作步驟詳解

    Jenkins忘記密碼密碼重置操作步驟詳解

    這篇文章主要為大家介紹了Jenkins忘記密碼密碼重置操作步驟詳解,有需要的朋友可以借鑒參考下,希望能夠有所幫助,祝大家多多進(jìn)步,早日升職加薪
    2023-09-09
  • Java設(shè)計(jì)模式之職責(zé)鏈模式詳解

    Java設(shè)計(jì)模式之職責(zé)鏈模式詳解

    Java設(shè)計(jì)模式中有很多種類(lèi)別,例如單例模式、裝飾模式、觀(guān)察者模式等。本文將為大家詳細(xì)介紹其中的職責(zé)鏈模式,感興趣的可以了解一下
    2021-12-12
  • SpringBoot中的@RequestMapping注解的用法示例

    SpringBoot中的@RequestMapping注解的用法示例

    @RequestMapping注解是SpringBoot中最常用的注解之一,它可以幫助開(kāi)發(fā)者定義和處理HTTP請(qǐng)求,本篇文章我們將詳細(xì)為大家介紹如何使用SpringBoot中的@RequestMapping注解,感興趣的同學(xué)跟著小編一起來(lái)學(xué)習(xí)吧
    2023-06-06
  • java中Vector類(lèi)的常用方法詳解

    java中Vector類(lèi)的常用方法詳解

    這篇文章主要為大家詳細(xì)介紹了java中Vector類(lèi)的常用方法,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下,希望能夠給你帶來(lái)幫助
    2022-02-02
  • 將Java程序的輸出結(jié)果寫(xiě)到txt文件中的方法

    將Java程序的輸出結(jié)果寫(xiě)到txt文件中的方法

    今天小編就為大家分享一篇將Java程序的輸出結(jié)果寫(xiě)到txt文件中的方法,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。一起跟隨小編過(guò)來(lái)看看吧
    2018-07-07

最新評(píng)論