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

【設(shè)計模式】SpringBoot優(yōu)雅使用策略模式

這篇具有很好參考價值的文章主要介紹了【設(shè)計模式】SpringBoot優(yōu)雅使用策略模式。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

1.概述

本篇文章主要會描述SpringBoot與策略模式的結(jié)合使用,因為不涉及到理論部分,所以在閱讀本篇之前,需要對策略模式的理論已經(jīng)有了一個基本的了解。

1.1.簡述策略模式

策略模式有3種角色,分別為:選擇器、抽象策略、策略實例。
其中選擇器selector又被稱為上下文context,其作用為通過不同的標(biāo)識來獲取對應(yīng)的策略實例。策略實例就是封裝不同算法的實例對象,而抽象策略就是策略實例的頂層接口。

簡單類圖大概就是這個樣子:
【設(shè)計模式】SpringBoot優(yōu)雅使用策略模式

2.實現(xiàn)方法

我們在學(xué)習(xí)設(shè)計模式的時候會發(fā)現(xiàn)在各類模式中的類與對象都是手動創(chuàng)建的,而在日常的開發(fā)中,我們往往會將對象的生命周期交給Spring管理,也就是說,需要我們自行將各類bean組合成一個可運行的設(shè)計模式。

假設(shè)我們有這樣一個場景,需要對系統(tǒng)的中的數(shù)據(jù)做統(tǒng)計,需求中的統(tǒng)計維度分為:按周統(tǒng)計、按月統(tǒng)計,現(xiàn)使用策略模式來實現(xiàn)這個需求。

2.1.實現(xiàn)思路

  • 前置設(shè)計:通過定義常量來標(biāo)識策略的類型,使用者調(diào)用時可以通過常量獲取對應(yīng)的策略實例。
  • 策略設(shè)計:按周、按月分別對應(yīng)兩個bean實例,在內(nèi)部各自實現(xiàn)對應(yīng)的統(tǒng)計維度邏輯,在兩個bean實例的上層是抽象策略,有一個通用的接口(或抽象類)用于對外提供訪問入口。
  • 選擇器設(shè)計:可以通過Map來存儲數(shù)據(jù),調(diào)用者調(diào)用時可以通過策略標(biāo)識來獲取對應(yīng)的策略實例。

可以看到,實現(xiàn)思路是比較簡單的,現(xiàn)在的問題就是如何把策略的bean實例對象放到Map中。

最簡單的方式當(dāng)然就是把對應(yīng)的beanClass對象直接寫死在Map中,調(diào)用的時候可以通過applicationContext.getBean()獲取到bean實例。但是這種方式不利于拓展,后續(xù)要新增一個策略實例的時候,還得修改這里的Map

第二種方式,我們可以通過解析注解來實現(xiàn),給每個策略實例打上一個注解,注解中的值對應(yīng)的就是按周、按月這樣的常量標(biāo)識,在SpringBoot啟動時,通過擴(kuò)展點掃描抽象策略,獲取它所有的策略實例,解析注解后放入Map中。這種方式利于拓展,新增一個策略實例不需要對舊代碼有任何改動。

2.2.實現(xiàn)代碼

這里原本是使用自定義注解來實現(xiàn)的,經(jīng)過評論區(qū)的提醒,對于注解實現(xiàn)這種方式,通過Spring中自帶的@Component注解來實現(xiàn)會更加簡潔,下面是去掉了自定義注解的實現(xiàn)方式。

  • 第一步:編寫抽象策略與策略實例
    /**
     * 統(tǒng)計抽象策略處理器
     */
    public interface StatisticBaseHandler {
        void doStatistic();
    }
    
    import org.springframework.stereotype.Component;
    
    /**
     * 月統(tǒng)計策略
     */
    @Component("month")
    public class StatisticByMonthHandler implements StatisticBaseHandler {
    
        @Override
        public void doStatistic() {
            System.out.println("StatisticByMonthHandler");
        }
    }
    
    import org.springframework.stereotype.Component;
    
    /**
     * 周統(tǒng)計策略
     */
    @Component("week")
    public class StatisticByWeekHandler implements StatisticBaseHandler {
    
        @Override
        public void doStatistic() {
            System.out.println("StatisticByWeekHandler");
        }
    }
    
  • 第二步:編寫選擇器
    這里直接使用@Resouce或者@Autowired注入一個Map。
    import org.springframework.stereotype.Component;
    
    import javax.annotation.PostConstruct;
    import javax.annotation.Resource;
    import java.util.Map;
    
    /**
     * 統(tǒng)計策略選擇器
     */
    @Component
    public class StatisticStrategySelector {
    
        @Resource
        private Map<String, StatisticBaseHandler> selectorMap;
    
        /**
         * 根據(jù)類型選擇對應(yīng)的策略
         *
         * @param type 統(tǒng)計周期類型
         * @return 統(tǒng)計抽象策略處理器
         */
        public StatisticBaseHandler select(String type) {
            return selectorMap.get(type);
        }
    }
    

啟動完成之后,Map中的key值為@Component中配置的key。
【設(shè)計模式】SpringBoot優(yōu)雅使用策略模式

2.3.策略拓展

現(xiàn)在需求發(fā)生了變化,需要加入一個按年統(tǒng)計的策略類型,只需要新增一個策略實例即可,如下:

import org.springframework.stereotype.Component;

/**
 * 年統(tǒng)計策略
 */
@Component("year")
public class StatisticByYearHandler implements StatisticBaseHandler {

    @Override
    public void doStatistic() {
        System.out.println("StatisticByYearHandler");
    }
}

其他的代碼都不需要修改,再次查看Map中的值:
【設(shè)計模式】SpringBoot優(yōu)雅使用策略模式

2.4.執(zhí)行調(diào)用

隨便寫了一個測試方法,如下:

public void invoke() {
    this.doInvoke("week");
    this.doInvoke("month");
    this.doInvoke("year");
}

public void doInvoke(String type) {
    StatisticBaseHandler handler = select(type);
    handler.doStatistic();
}

【設(shè)計模式】SpringBoot優(yōu)雅使用策略模式
分別打印出了按周統(tǒng)計、按月統(tǒng)計、按年統(tǒng)計方法中的輸出值,表示策略模式定義成功了,在我們實際的開放中,只需要前端(或其他調(diào)用端)傳入對用的標(biāo)識字符串,就可以執(zhí)行不同的統(tǒng)計邏輯了。

3.總結(jié)

通過Spring獲取接口的實現(xiàn),并解析實現(xiàn)類上的注解的方式,可以在程序啟動時動態(tài)的將策略注入到一個Map中,作為策略的容器。使用時傳入標(biāo)識符就可以獲取到對應(yīng)的策略執(zhí)行了。文章來源地址http://www.zghlxwxcb.cn/news/detail-495046.html

到了這里,關(guān)于【設(shè)計模式】SpringBoot優(yōu)雅使用策略模式的文章就介紹完了。如果您還想了解更多內(nèi)容,請在右上角搜索TOY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

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

領(lǐng)支付寶紅包贊助服務(wù)器費用

相關(guān)文章

  • Python設(shè)計模式:你的代碼真的夠優(yōu)雅嗎?

    當(dāng)涉及到代碼優(yōu)化時,Python作為一種高級編程語言,具有廣泛的應(yīng)用領(lǐng)域和強(qiáng)大的功能。在軟件開發(fā)中,設(shè)計模式是一種被廣泛采用的解決問題的方案,它提供了一種在特定情境中重復(fù)使用的可行方案。在Python中,有許多設(shè)計模式可以用來優(yōu)化代碼。 其中兩種常見的設(shè)計模式

    2024年01月25日
    瀏覽(21)
  • 設(shè)計模式——設(shè)計模式以及六大原則概述

    設(shè)計模式——設(shè)計模式以及六大原則概述

    設(shè)計模式代表有經(jīng)驗的面向?qū)ο筌浖_發(fā)人員使用的最佳實踐。 設(shè)計模式是軟件開發(fā)人員在軟件開發(fā)過程中面臨的一般問題的解決方案。 這些解決方案是由許多軟件開發(fā)人員在相當(dāng)長的時間內(nèi)通過試錯獲得的。 在 1994 年,由 Erich Gamma、Richard Helm、Ralph Johnson 和 John Vlissides 四

    2024年02月13日
    瀏覽(22)
  • [設(shè)計模式]行為型模式-策略模式

    策略模式定義了一系列算法,并將每個算法封裝起來,使它們可以互相替換,且算法的變換不會影響使用算法的客戶。 在項目開發(fā)中,我們經(jīng)常要根據(jù)不同的場景,采取不同的措施,也就是不同的策略。假設(shè)我們需要對a、b這兩個整數(shù)進(jìn)行計算,根據(jù)條件的不同,需要執(zhí)行不

    2024年02月19日
    瀏覽(32)
  • 設(shè)計模式—策略模式

    設(shè)計模式—策略模式

    目錄 一、定義 二、特點 三、優(yōu)點 四、缺點 五、實例 六.涉及到的知識點 1、一個類里面有哪些東西? 2、類和實例 什么是類? 什么是實例? 什么是實例化? 3、字段和屬性 什么是字段? 屬性是什么? 屬性怎么用呢? 屬性有什么作用? 靜態(tài)屬性是什么? 屬性和字段的公有

    2024年02月10日
    瀏覽(23)
  • 【設(shè)計模式】4、策略模式

    【設(shè)計模式】4、策略模式

    策略模式是一種行為設(shè)計模式,它能定義一系列算法,把每種算法分別放入獨立的類中,以是算法的對象能相互替換。 一天, 你打算為游客們創(chuàng)建一款導(dǎo)游程序。 該程序的核心功能是提供美觀的地圖, 以幫助用戶在任何城市中快速定位。 用戶期待的程序新功能是自動路線

    2024年02月20日
    瀏覽(23)
  • 設(shè)計模式-策略模式

    策略模式是一種行為型設(shè)計模式,它允許在運行時動態(tài)改變對象的行為。在策略模式中,算法被封裝在獨立的策略類中,使得它們可以互換使用。下面是一個簡單的例子: 假設(shè)我們有一個計算稅收的系統(tǒng),現(xiàn)在需要計算不同類型的商品的稅收,例如書籍、食品和服裝。每種商

    2024年02月15日
    瀏覽(25)
  • 設(shè)計模式:策略模式

    策略模式(Strategy Pattern)是一種行為型設(shè)計模式,它允許在運行時根據(jù)不同的情況選擇不同的算法或行為。策略模式通過將算法封裝成獨立的策略類,使得它們可以互相替換,而不影響客戶端的使用。 在策略模式中,有三個核心組件: 策略接口(Strategy Interface):定義了策

    2024年02月07日
    瀏覽(23)
  • 【設(shè)計模式】 策略模式

    策略模式 (Strategy Pattern)是一種行為型設(shè)計模式,它定義了一系列算法,將每個算法封裝起來,使它們可以相互替換,讓客戶端代碼和算法的具體實現(xiàn)解耦。這樣,客戶端可以根據(jù)不同的需求選擇不同的算法,而無需修改原有的代碼。 靈活性增強(qiáng) :策略模式使得算法獨立于

    2024年02月14日
    瀏覽(37)
  • 設(shè)計模式之策略模式

    策略設(shè)計模式(Strategy Pattern)是一種行為設(shè)計模式,它允許在運行時選擇算法的行為。策略模式定義了一系列算法,并將每個算法封裝起來,使它們可以互相替換。這種模式使算法的變化獨立于使用算法的客戶端。 概念 在策略模式中,有以下幾個關(guān)鍵組成部分: 策略接口(

    2024年01月23日
    瀏覽(50)
  • 設(shè)計模式--策略模式

    設(shè)計模式--策略模式

    目錄 一.場景 1.1場景 2.2 何時使用 ?2.3個人理解 二. 業(yè)務(wù)場景練習(xí) ?2.1業(yè)務(wù): 2.2具體實現(xiàn) 2.3思路? ?三.總結(jié) 3.1策略模式的特點: ?3.2策略模式優(yōu)點 3.3策略模式缺點 1.1場景 許多相關(guān)的類僅僅是行為有異,也就是說業(yè)務(wù)代碼需要根據(jù)場景不同,切換不同的實現(xiàn)邏輯 一個類定義了

    2024年02月13日
    瀏覽(26)

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

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

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

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

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包