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

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

這篇具有很好參考價(jià)值的文章主要介紹了設(shè)計(jì)模式--策略模式。希望對(duì)大家有所幫助。如果存在錯(cuò)誤或未考慮完全的地方,請(qǐng)大家不吝賜教,您也可以點(diǎn)擊"舉報(bào)違法"按鈕提交疑問(wèn)。

目錄

一.場(chǎng)景

1.1場(chǎng)景

2.2 何時(shí)使用

?2.3個(gè)人理解

二. 業(yè)務(wù)場(chǎng)景練習(xí)

?2.1業(yè)務(wù):

2.2具體實(shí)現(xiàn)

2.3思路?

?三.總結(jié)

3.1策略模式的特點(diǎn):

?3.2策略模式優(yōu)點(diǎn)

3.3策略模式缺點(diǎn)


一.場(chǎng)景

1.1場(chǎng)景

  1. 許多相關(guān)的類僅僅是行為有異,也就是說(shuō)業(yè)務(wù)代碼需要根據(jù)場(chǎng)景不同,切換不同的實(shí)現(xiàn)邏輯
  2. 一個(gè)類定義了多種行為,并且這些行為在類的操作中以多個(gè)條件語(yǔ)句的形式出現(xiàn),也就是說(shuō)代碼中存在大量 if else 邏輯判斷

2.2 何時(shí)使用

? ?當(dāng)一件任務(wù)可以使用不同的方式來(lái)完成,就可以使用策略模式?

?2.3個(gè)人理解

? 策略模式簡(jiǎn)單理解,應(yīng)該是對(duì)于同一個(gè)業(yè)務(wù)功能,在不同的場(chǎng)景需求下提供不同的實(shí)現(xiàn)邏輯,來(lái)達(dá)到動(dòng)態(tài)切換業(yè)務(wù)算法,滿足不同場(chǎng)景的目的。同時(shí)它也有另外的好處,即優(yōu)化代碼結(jié)構(gòu),使其脫離大量邏輯判斷,對(duì)外只提供 Context上下文,讓算法與實(shí)際業(yè)務(wù)代碼解耦,對(duì)使用者屏蔽底層實(shí)現(xiàn)邏輯。

? 對(duì)于我們根據(jù)不同的場(chǎng)景, 會(huì)定義應(yīng)對(duì)不同場(chǎng)景相應(yīng)的方法, 然而這些方法就是我們的策略,?

策略模式 UML類圖如下:

設(shè)計(jì)模式--策略模式,設(shè)計(jì)模式,設(shè)計(jì)模式,策略模式,java

?每個(gè)策略通過(guò)不同業(yè)務(wù)條件, 找到相應(yīng)的算法類或邏輯類 , 最終得到想要的結(jié)果?

二. 業(yè)務(wù)場(chǎng)景練習(xí)

?2.1業(yè)務(wù):

? ? ?我們出行會(huì)根據(jù)不同的交通方式,制定不同的出行方式,比如:自駕、大巴車、高鐵、飛機(jī),而每出行方式就是一個(gè)定義一個(gè)策略。

2.2具體實(shí)現(xiàn)

首先:定義一個(gè)出行接口

/**
 * 描述:出行策略接口
 *
 * @author QU
 * @date 2023/8/10
 */
public interface TripModeStrategy {
    void tripModeStrategy();
}

策略一:自駕出行

/**
 * 描述: 自駕出行
 *
 * @author QU
 * @date 2023/8/10
 */
public class CarTripStrategy implements TripModeStrategy {

    @Override
    public void tripModeStrategy() {
        System.out.println("自駕出行,花費(fèi)200元,用時(shí)6個(gè)小時(shí)");
    }
}

策略二:大巴出行

/**
 * 描述: 公交車出行
 *
 * @author QU
 * @date 2023/8/10
 */
public class BusTripStrategy implements TripModeStrategy {
    @Override
    public void tripModeStrategy() {
        System.out.println("公交車出行,花費(fèi)100元,用時(shí)8個(gè)小時(shí)");
    }
}

策略三:高鐵出行

/**
 * 描述: 高鐵出行
 *
 * @author QU
 * @date 2023/8/10
 */
public class HighSpeedTripStrategy implements TripModeStrategy {
    @Override
    public void tripModeStrategy() {
        System.out.println("高鐵出行,花費(fèi)500元,用時(shí)2.5小時(shí)");
    }
}

策略四:飛機(jī)出行

/**
 * 描述: 飛機(jī)出行
 *
 * @author QU
 * @date 2023/8/10
 */
public class AircraftTripStrategy implements TripModeStrategy {
    @Override
    public void tripModeStrategy() {
        System.out.println("飛機(jī)出行,花費(fèi)1000元,用時(shí)1個(gè)小時(shí)");
    }
}

制定策略輸出類

package strategy.trip;

/**
 * 描述: 策略輸出
 *
 * @author QU
 * @date 2023/8/10
 */
public class TripMode {
    //注入策略
    private TripModeStrategy tripModeStrategy;

    TripMode(TripModeStrategy tripModeStrategy){
        this.tripModeStrategy=tripModeStrategy;
    }
    //輸出具體策略
    public void executeTripStrategy(){
        tripModeStrategy.tripModeStrategy();
    }
}

制定策略工廠

/**
 * 描述: 策略工廠
 *
 * @author QU
 * @date 2023/8/10
 */
public class TripStrategyFactory {
    /**
     * 定義map存放所有策略.
     */
    private static final Map<String,TripModeStrategy> TRIP_MODE_STRATEGY_MAP=new HashMap<>();

    /**
     * 使用靜態(tài)方法來(lái)加載策略到map中
     */
    static{
        TRIP_MODE_STRATEGY_MAP.put(TripEnum.CAR,new CarTripStrategy());
        TRIP_MODE_STRATEGY_MAP.put(TripEnum.BUS,new BusTripStrategy());
        TRIP_MODE_STRATEGY_MAP.put(TripEnum.HIGH_SPEED,new HighSpeedTripStrategy());
        TRIP_MODE_STRATEGY_MAP.put(TripEnum.AIRCRAFT,new AircraftTripStrategy());
    }

    /**
     * 使用靜態(tài)方法通過(guò)模擬客戶端傳接的類型(參數(shù))
     *
     * @param key 策略類型(客戶端用戶選擇的出行方式)
     * @return 具體某條策略
     */
    public static TripModeStrategy tripModeStrategy(String key){
        TripModeStrategy tripModeStrategy = TRIP_MODE_STRATEGY_MAP.get(key);
        return tripModeStrategy;
    }

制定出行類型(出行常量)也可以認(rèn)為我們wed或?qū)嶋H開(kāi)發(fā)項(xiàng)目中的客戶端選擇的一條策略(用戶選擇的出行方式)

/**
 * 描述: 出行常量
 *
 * @author QU
 * @date 2023/8/10
 */
public class TripEnum {
    public static final String CAR="car";
    public static final String BUS="bus";
    public static final String HIGH_SPEED="high_speed";
    public static final String AIRCRAFT="aircraft";
}

測(cè)試類:

/**
 * 描述: 測(cè)試出行方式
 *
 * @author QU
 * @date 2023/8/10
 */
public class TripTest {
    public static void main(String[] args) {
        //自駕
        TripModeStrategy tripModeStrategy = TripStrategyFactory.tripModeStrategy(TripEnum.CAR);
        //大巴車
         //tripModeStrategy = TripStrategyFactory.tripModeStrategy(TripEnum.BUS);
        //高鐵
         //tripModeStrategy = TripStrategyFactory.tripModeStrategy(TripEnum.HIGH_SPEED);
        //飛機(jī)
        tripModeStrategy = TripStrategyFactory.tripModeStrategy(TripEnum.AIRCRAFT);
        TripMode tripMode=new TripMode(tripModeStrategy);
        tripMode.executeTripStrategy();
    }
}

運(yùn)行結(jié)果:這里根據(jù)程序運(yùn)行選擇就近原則(最后取變量值),預(yù)測(cè)是策略四飛機(jī)出行

結(jié)果:

設(shè)計(jì)模式--策略模式,設(shè)計(jì)模式,設(shè)計(jì)模式,策略模式,java

2.3思路?

  1. 首先根據(jù)業(yè)務(wù)制定出行策略(TripModeStrategy?)
  2. 制定策略工廠將策略裝進(jìn)我們的靜態(tài)代碼塊在工程啟動(dòng)已執(zhí)行到map中,靜態(tài)方法等待調(diào)用(tripModeStrategy(String key))
  3. 制定策略輸出類,通過(guò)客戶端選擇出行方式去策略工廠中獲取靜態(tài)方法輸出策略

?三.總結(jié)

3.1策略模式的特點(diǎn):

高內(nèi)聚低耦合,可擴(kuò)展,遵循ocp原則(開(kāi)放封閉原則)

?3.2策略模式優(yōu)點(diǎn)

1.策略模式的功能就是通過(guò)抽象、封裝來(lái)定義一系列的算法,使得這些算法可以相互替換,所以為這些算法定義一個(gè)公共的接口,以約束這些算法的功能實(shí)現(xiàn)。如果這些算法具有公共的功能,可以將接口變?yōu)槌橄箢悾瑢⒐补δ芊诺匠橄蟾割惱锩妗?/p>

2.策略模式的一系列算法是可以相互替換的、是平等的,寫(xiě)在一起就是if-else組織結(jié)構(gòu),如果算法實(shí)現(xiàn)里又有條件語(yǔ)句,就構(gòu)成了多重條件語(yǔ)句,可以用策略模式,避免這樣的多重條件語(yǔ)句。

3.擴(kuò)展性更好:在策略模式中擴(kuò)展策略實(shí)現(xiàn)非常的容易,只要新增一個(gè)策略實(shí)現(xiàn)類,然后在使用策略實(shí)現(xiàn)的地方,使用這個(gè)新的策略實(shí)現(xiàn)就好了。

3.3策略模式缺點(diǎn)

1.客戶端必須了解所有的策略,清楚它們的不同:

如果由客戶端來(lái)決定使用何種算法,那客戶端必須知道所有的策略,清楚各個(gè)策略的功能和不同,這樣才能做出正確的選擇,但是這暴露了策略的具體實(shí)現(xiàn)。

2.增加了對(duì)象的數(shù)量:

由于策略模式將每個(gè)具體的算法都單獨(dú)封裝為一個(gè)策略類,如果可選的策略有很多的話,那對(duì)象的數(shù)量也會(huì)很多。

3.只適合偏平的算法結(jié)構(gòu):

由于策略模式的各個(gè)策略實(shí)現(xiàn)是平等的關(guān)系(可相互替換),實(shí)際上就構(gòu)成了一個(gè)扁平的算法結(jié)構(gòu)。即一個(gè)策略接口下面有多個(gè)平等的策略實(shí)現(xiàn)(多個(gè)策略實(shí)現(xiàn)是兄弟關(guān)系),并且運(yùn)行時(shí)只能有一個(gè)算法被使用。這就限制了算法的使用層級(jí),且不能被嵌套。文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-647943.html

到了這里,關(guān)于設(shè)計(jì)模式--策略模式的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!

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

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

相關(guān)文章

  • Java設(shè)計(jì)模式之策略(Strategy)模式

    策略(Strategy)設(shè)計(jì)模式定義了一系列算法,將它們封裝起來(lái),并且可以相互替換使用,從而使得算法可以獨(dú)立于使用它的客戶而變化。 策略(Strategy)設(shè)計(jì)模式是一種行為型設(shè)計(jì)模式,它允許在運(yùn)行時(shí)動(dòng)態(tài)地選擇算法。策略模式將算法封裝為算法族,從而可以在運(yùn)行時(shí)根據(jù)

    2024年02月15日
    瀏覽(34)
  • Java設(shè)計(jì)模式—策略模式(Strategy Mode)

    目錄 前言 一、策略模式的簡(jiǎn)介 二、策略模式的概念 三、策略模式的作用 四、策略模式的優(yōu)、缺點(diǎn) 策略模式的優(yōu)點(diǎn): 策略模式的缺點(diǎn): 五、策略模式應(yīng)用場(chǎng)景 六、代碼案例 1)抽象接口類 2)具體的策略類:減 3)具體策略類:打折 4)上下文類 5)客戶端Main代碼測(cè)試 總結(jié)

    2024年02月08日
    瀏覽(34)
  • Java設(shè)計(jì)模式-策略模式-基于Spring實(shí)現(xiàn)

    Java設(shè)計(jì)模式-策略模式-基于Spring實(shí)現(xiàn)

    策略模式是一種行為設(shè)計(jì)模式,它允許在運(yùn)行時(shí)選擇算法的行為。它將算法封裝在 獨(dú)立的策略類 中,使得它們可以相互替換,而不影響客戶端代碼。這種模式通過(guò) 將算法的選擇從客戶端代碼中分離出來(lái) ,提供了更大的靈活性和可維護(hù)性。 在Java中,策略模式的設(shè)計(jì)理念可以

    2024年02月08日
    瀏覽(26)
  • Java 大廠八股文面試專題-設(shè)計(jì)模式 工廠方法模式、策略模式、責(zé)任鏈模式

    Java 大廠八股文面試專題-設(shè)計(jì)模式 工廠方法模式、策略模式、責(zé)任鏈模式

    ????????在平時(shí)的開(kāi)發(fā)中,涉及到設(shè)計(jì)模式的有兩塊內(nèi)容,第一個(gè)是我們 平時(shí)使用的框架 (比如spring、mybatis等),第二個(gè)是我們自己開(kāi)發(fā)業(yè)務(wù)使用的設(shè)計(jì)模式。 ????????面試官一般比較關(guān)心的是你在開(kāi)發(fā)過(guò)程中, 有沒(méi)有使用過(guò)設(shè)計(jì)模式,或者你在簡(jiǎn)歷上寫(xiě)了關(guān)于設(shè)計(jì)

    2024年02月10日
    瀏覽(29)
  • 【設(shè)計(jì)模式——學(xué)習(xí)筆記】23種設(shè)計(jì)模式——策略模式Strategy(原理講解+應(yīng)用場(chǎng)景介紹+案例介紹+Java代碼實(shí)現(xiàn))

    【設(shè)計(jì)模式——學(xué)習(xí)筆記】23種設(shè)計(jì)模式——策略模式Strategy(原理講解+應(yīng)用場(chǎng)景介紹+案例介紹+Java代碼實(shí)現(xiàn))

    有各種鴨子,比如野鴨、北京鴨、水鴨等。 鴨子有各種行為,比如走路、叫、飛行等。不同鴨子的行為可能略有不同。要求顯示鴨子的信息 不同的鴨子繼承一個(gè)父類Duck,如果是相同的行為就繼承,不同行為就重寫(xiě)方法 實(shí)現(xiàn) 【鴨子抽象類】 【野鴨】 【北京鴨】 【玩具鴨】

    2024年02月12日
    瀏覽(35)
  • 【策略設(shè)計(jì)模式詳解】C/Java/JS/Go/Python/TS不同語(yǔ)言實(shí)現(xiàn)

    【策略設(shè)計(jì)模式詳解】C/Java/JS/Go/Python/TS不同語(yǔ)言實(shí)現(xiàn)

    策略模式(Strategy Pattern)屬于行為型設(shè)計(jì)模式。將每一個(gè)算法封裝到具有共同接口的獨(dú)立類中,根據(jù)需要來(lái)綁定策略,使得具體實(shí)現(xiàn)和策略解耦。 當(dāng)你想使用對(duì)象中各種不同的算法變體,使用if...else 所帶來(lái)的復(fù)雜和難以維護(hù),可使用策略模式?;蛘弋?dāng)有許多相同類,它們僅

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

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

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

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

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

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

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

    2024年02月13日
    瀏覽(26)
  • 設(shè)計(jì)模式——策略模式

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

    定義: 該模式定義了一系列算法,并將每個(gè)算法封裝起來(lái),使它們可以相互替換,且算法的變化不會(huì)影響使用算法的客戶。策略模式屬于對(duì)象行為模式,它通過(guò)對(duì)算法進(jìn)行封裝,把便用算法的責(zé)任和算法的實(shí)現(xiàn)分割開(kāi)來(lái),并委派給不算法進(jìn)象行管理。 主要角色如下: 示例: 假定現(xiàn)在需要

    2024年02月22日
    瀏覽(20)

覺(jué)得文章有用就打賞一下文章作者

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

請(qǐng)作者喝杯咖啡吧~博客贊助

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

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包