一区二区三区在线-一区二区三区亚洲视频-一区二区三区亚洲-一区二区三区午夜-一区二区三区四区在线视频-一区二区三区四区在线免费观看

服務(wù)器之家:專注于服務(wù)器技術(shù)及軟件下載分享
分類導(dǎo)航

PHP教程|ASP.NET教程|Java教程|ASP教程|編程技術(shù)|正則表達(dá)式|C/C++|IOS|C#|Swift|Android|VB|R語言|JavaScript|易語言|vb.net|

服務(wù)器之家 - 編程語言 - Java教程 - 實(shí)踐講解SpringBoot自定義初始化Bean+HashMap優(yōu)化策略模式

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

2022-01-07 13:25Simpleeee Java教程

本篇講解了SpringBoot自定義初始化Bean+HashMap優(yōu)化策略模式,通過實(shí)踐的方式更通俗易懂,對(duì)此不了解的同學(xué)跟著小編往下看吧

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

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

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

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

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

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

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

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

創(chuàng)建三個(gè)不同的接口實(shí)現(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;
    }
}

接下來就是重點(diǎn),我們利用到springboot初始化Bean的方式結(jié)合HashMap,來實(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方法,凡是繼承該接口的類,在初始化bean的時(shí)候都會(huì)執(zhí)行該方法。

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

測(cè)試方法如下,通過hashmap的key獲取對(duì)應(yīng)的實(shí)現(xiàn)類對(duì)象,這樣就不必再自定義參數(shù)類型,徹底消除了if/else,也不用暴露給方法調(diào)用者過多的業(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í)踐講解SpringBoot自定義初始化Bean+HashMap優(yōu)化策略模式

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

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

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

利用這種自定義初始化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)化策略內(nèi)容請(qǐng)搜索服務(wù)器之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持服務(wù)器之家!

原文鏈接:https://www.cnblogs.com/itcq/p/15293737.html

延伸 · 閱讀

精彩推薦
  • Java教程Java8中Stream使用的一個(gè)注意事項(xiàng)

    Java8中Stream使用的一個(gè)注意事項(xiàng)

    最近在工作中發(fā)現(xiàn)了對(duì)于集合操作轉(zhuǎn)換的神器,java8新特性 stream,但在使用中遇到了一個(gè)非常重要的注意點(diǎn),所以這篇文章主要給大家介紹了關(guān)于Java8中S...

    阿杜7482021-02-04
  • Java教程小米推送Java代碼

    小米推送Java代碼

    今天小編就為大家分享一篇關(guān)于小米推送Java代碼,小編覺得內(nèi)容挺不錯(cuò)的,現(xiàn)在分享給大家,具有很好的參考價(jià)值,需要的朋友一起跟隨小編來看看吧...

    富貴穩(wěn)中求8032021-07-12
  • Java教程20個(gè)非常實(shí)用的Java程序代碼片段

    20個(gè)非常實(shí)用的Java程序代碼片段

    這篇文章主要為大家分享了20個(gè)非常實(shí)用的Java程序片段,對(duì)java開發(fā)項(xiàng)目有所幫助,感興趣的小伙伴們可以參考一下 ...

    lijiao5352020-04-06
  • Java教程Java使用SAX解析xml的示例

    Java使用SAX解析xml的示例

    這篇文章主要介紹了Java使用SAX解析xml的示例,幫助大家更好的理解和學(xué)習(xí)使用Java,感興趣的朋友可以了解下...

    大行者10067412021-08-30
  • Java教程升級(jí)IDEA后Lombok不能使用的解決方法

    升級(jí)IDEA后Lombok不能使用的解決方法

    最近看到提示IDEA提示升級(jí),尋思已經(jīng)有好久沒有升過級(jí)了。升級(jí)完畢重啟之后,突然發(fā)現(xiàn)好多錯(cuò)誤,本文就來介紹一下如何解決,感興趣的可以了解一下...

    程序猿DD9332021-10-08
  • Java教程Java實(shí)現(xiàn)搶紅包功能

    Java實(shí)現(xiàn)搶紅包功能

    這篇文章主要為大家詳細(xì)介紹了Java實(shí)現(xiàn)搶紅包功能,采用多線程模擬多人同時(shí)搶紅包,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙...

    littleschemer13532021-05-16
  • Java教程Java BufferWriter寫文件寫不進(jìn)去或缺失數(shù)據(jù)的解決

    Java BufferWriter寫文件寫不進(jìn)去或缺失數(shù)據(jù)的解決

    這篇文章主要介紹了Java BufferWriter寫文件寫不進(jìn)去或缺失數(shù)據(jù)的解決方案,具有很好的參考價(jià)值,希望對(duì)大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望...

    spcoder14552021-10-18
  • Java教程xml與Java對(duì)象的轉(zhuǎn)換詳解

    xml與Java對(duì)象的轉(zhuǎn)換詳解

    這篇文章主要介紹了xml與Java對(duì)象的轉(zhuǎn)換詳解的相關(guān)資料,需要的朋友可以參考下...

    Java教程網(wǎng)2942020-09-17
主站蜘蛛池模板: 日本久久啪啪婷婷激情五月 | 国产成人啪精品视频站午夜 | 精品一卡2卡3卡4卡5卡亚洲 | 午夜精品久久久久 | 91免费永久国产在线观看 | 4s4s4s4s色大众影视 | 2022国产麻豆剧传媒古装 | 免费xxxx日本大片在线观看 | 欧美一区二区三区成人看不卡 | 日本在线看免费 | 精品久久久久久 | 天天操婷婷 | 国产欧美va欧美va香蕉在线观看 | 美女福利视频一区二区 | 午夜小视频免费观看 | 接吻吃胸摸下面啪啪教程 | 男人扒开女人下身添 | 天莱男模gary | 五月天色网站 | 黄色a| 国产伦码精品一区二区 | 无套内射在线观看THEPORN | 毛片在线网址 | 果冻传媒在线免费观看 | 美女尿口照片 | 四虎永久网址在线观看 | 久青草国产97香蕉在线视频 | 精品一区二区三区在线播放 | 干操网 | luanlun绝对真实乱 | 国产精品久久久久久久久久久久 | 非洲黑人女bbwxxxx | 亚洲精品日韩专区在线观看 | 欧美三级一区 | 午夜剧场1000| 91男人| 国产精品视频第一页 | 91精品啪在线观看国产老湿机 | 精品破处 | 亚洲人成网站在线观看妞妞网 | 日韩在线视频一区二区三区 |