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

行為型設計模式——策略模式

這篇具有很好參考價值的文章主要介紹了行為型設計模式——策略模式。希望對大家有所幫助。如果存在錯誤或未考慮完全的地方,請大家不吝賜教,您也可以點擊"舉報違法"按鈕提交疑問。

策略模式

策略模式非常簡單,只需要將策略或者某個算法定義成一個類,然后傳給需要使用的對象即可。**定義:**該模式定義了一系列算法,并將每個算法封裝起來,使它們可以相互替換,且算法的變化不會影響使用算法的客戶。策略模式屬于對象行為模式,它通過對算法進行封裝,把使用算法的責任和算法的實現(xiàn)分割開來,并委派給不同的對象對這些算法進行管理。例如在ArrayListsort()中,如果想按照你自己的想法排序數組中的對象,你需要實現(xiàn)Comparator并重寫排序方法,這個就是將排序策略封裝成了Comparator 對象。

策略模式的主要角色如下:

  • 抽象策略(Strategy)類:這是一個抽象角色,通常由一個接口或抽象類實現(xiàn)。此角色給出所有的具體策略類所需的接口。
  • 具體策略(Concrete Strategy)類:實現(xiàn)了抽象策略定義的接口,提供具體的算法實現(xiàn)或行為。
  • 環(huán)境(Context)類:持有一個策略類的引用,最終給客戶端調用。

案例實現(xiàn)

【例】促銷活動

大家都參加過雙十一購物活動吧,假設京東商場的優(yōu)惠策略有很多種,那么哪一種最實惠呢?例如滿300減30為第一種策略,第二種為總價打九折,第三種為3000減600 優(yōu)惠券一張,不與參與其他優(yōu)惠,那么我們可以給出下面的類圖,其中SalesMan為京東App:

行為型設計模式——策略模式,技術提升篇,設計模式,策略模式,Java策略模式

代碼:

首先定義京東App類,即上面的SalesMan類:

public class JDApp {
    private Strategy strategy;

    public double payment(Strategy strategy,double total){
        return strategy.calculatePrice(total);
    }

}

接著定義策略接口,具體的策略實現(xiàn)該接口即可,三種策略實現(xiàn)如下:

public interface Strategy {
    double calculatePrice(double total);
}

public class StrategyA implements Strategy{
    @Override
    public double calculatePrice(double total) {
        // 總價打九折
        System.out.println("策略A:總價打九折");
        return total*0.90;
    }
}

public class StrategyB implements Strategy{
    @Override
    public double calculatePrice(double total) {
        // 每滿300減30,每滿1000減200
        System.out.println("策略B:每滿300減30,每滿1000減200");
        int numK = (int)total / 1000;
        int num300 = (int)(total-numK*1000) / 300;
        total = total - numK*200 - num300*30;
        return total;
    }
}

public class StrategyC implements Strategy {
    @Override
    public double calculatePrice(double total) {
        // 3000減600 優(yōu)惠券一張,不與參與其他優(yōu)惠
        System.out.println("策略C:3000減600大額優(yōu)惠券一張,不與參與其他優(yōu)惠");
        if(total>=3000){
            return total-600;
        }else {
            return total;
        }
    }
}

最后,在客戶端使用不同的策略,如下:

public class Main {
    public static void main(String[] args) {

        double total = 3200;

        JDApp jdApp = new JDApp();
        double straA = jdApp.payment(new StrategyA(), total);
        System.out.println(straA);

        double straB = jdApp.payment(new StrategyB(), total);
        System.out.println(straB);

        double straC = jdApp.payment(new StrategyC(), total);
        System.out.println(straC);
    }
}

輸出結果:

策略A:總價打九折
2880.0
策略B:每滿300減30,每滿1000減200
2600.0
策略C:3000減600大額優(yōu)惠券一張,不與參與其他優(yōu)惠
2600.0

優(yōu)點

  • 策略類之間可以自由切換

    由于策略類都實現(xiàn)同一個接口,所以使它們之間可以自由切換。

  • 易于擴展

    增加一個新的策略只需要添加一個具體的策略類即可,基本不需要改變原有的代碼,符合“開閉原則“

  • 避免使用多重條件選擇語句(if else),充分體現(xiàn)面向對象設計思想。文章來源地址http://www.zghlxwxcb.cn/news/detail-816721.html

缺點

  • 客戶端必須知道所有的策略類,并自行決定使用哪一個策略類。
  • 策略模式將造成產生很多策略類,可以通過使用享元模式在一定程度上減少對象的數量。

使用場景

  • 一個系統(tǒng)需要動態(tài)地在幾種算法中選擇一種時,可將每個算法封裝到策略類中。
  • 一個類定義了多種行為,并且這些行為在這個類的操作中以多個條件語句的形式出現(xiàn),可將每個條件分支移入它們各自的策略類中以代替這些條件語句。
  • 系統(tǒng)中各算法彼此完全獨立,且要求對客戶隱藏具體算法的實現(xiàn)細節(jié)時。
  • 系統(tǒng)要求使用算法的客戶不應該知道其操作的數據時,可使用策略模式來隱藏與算法相關的數據結構。
  • 多個類只區(qū)別在表現(xiàn)行為不同,可以使用策略模式,在運行時動態(tài)選擇具體要執(zhí)行的行為。

到了這里,關于行為型設計模式——策略模式的文章就介紹完了。如果您還想了解更多內容,請在右上角搜索TOY模板網以前的文章或繼續(xù)瀏覽下面的相關文章,希望大家以后多多支持TOY模板網!

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

領支付寶紅包贊助服務器費用

相關文章

  • 設計模式(4)--對象行為(9)--策略

    設計模式(4)--對象行為(9)--策略

    1. 意圖 ? ? 定義一系列的算法,把它們一個個封裝起來,并且使它們可相互替換。 ? ? 本模式使得算法可獨立于使用它的客戶而變化。 2. 三種角色 ? ?抽象策略(Strategy)、具體策略(Concrete Strategy)、上下文環(huán)境(Context) 3. 優(yōu)點 ? ? 3.1 可重用的相關算法系列。 ? ? 3.2 一個替代繼

    2024年02月04日
    瀏覽(21)
  • 軟件設計模式與體系結構-設計模式-行為型軟件設計模式-策略模式

    軟件設計模式與體系結構-設計模式-行為型軟件設計模式-策略模式

    策略模式(Strategy Pattern)是一種行為型設計模式,它定義了一系列算法,并將每個算法封裝在獨立的類中,使它們可以相互替換。策略模式使得算法可以獨立于使用它們的客戶端而變化。 下面是一個使用策略模式的簡單代碼示例,以解釋其工作原理: 在上述示例中,策略模

    2024年02月13日
    瀏覽(26)
  • 【設計模式與范式:行為型】61 | 策略模式(下):如何實現(xiàn)一個支持給不同大小文件排序的小程序?

    上一節(jié)課,我們主要介紹了策略模式的原理和實現(xiàn),以及如何利用策略模式來移除 if-else 或者 switch-case 分支判斷邏輯。今天,我們結合“給文件排序”這樣一個具體的例子,來詳細講一講策略模式的設計意圖和應用場景。 除此之外,在今天的講解中,我還會通過一步一步地

    2024年02月10日
    瀏覽(19)
  • 【十五】設計模式~~~行為型模式~~~狀態(tài)模式(Java)

    【十五】設計模式~~~行為型模式~~~狀態(tài)模式(Java)

    【學習難度:★★★☆☆,使用頻率:★★★☆☆】 在很多情況下,一個對象的行為取決于一個或多個動態(tài)變化的屬性,這樣的屬性叫做狀態(tài),這樣的對象叫做有狀態(tài)的(stateful)對象,這樣的對象狀態(tài)是從事先定義好的一系列值中取出的。當一個這樣的對象與外部事件產生互

    2024年02月07日
    瀏覽(16)
  • 【Java 設計模式】行為型之狀態(tài)模式

    狀態(tài)模式(State Pattern)是一種行為型設計模式,用于通過將對象的行為封裝到不同的狀態(tài)類中,使得對象在不同的狀態(tài)下具有不同的行為。狀態(tài)模式允許對象在內部狀態(tài)發(fā)生改變時改變其行為,而無需修改其代碼。在本文中,我們將深入研究Java中狀態(tài)模式的定義、結構、使

    2024年01月24日
    瀏覽(24)
  • 【Java 設計模式】行為型之命令模式

    命令模式(Command Pattern)是一種行為型設計模式,用于將請求封裝為對象,使得可以參數化客戶端對象,并且能夠排隊、記錄請求,以及支持撤銷操作。在本文中,我們將深入研究Java中命令模式的定義、結構、使用場景以及如何在實際開發(fā)中應用。 命令模式是一種行為型設

    2024年01月23日
    瀏覽(27)
  • 【Java 設計模式】行為型之責任鏈模式

    責任鏈模式(Chain of Responsibility Pattern)是一種行為型設計模式,用于將請求發(fā)送者和接收者解耦,使得多個對象都有機會處理請求。責任鏈模式通過創(chuàng)建一個處理請求的鏈,將請求沿著鏈傳遞,直到有一個對象能夠處理為止。在本文中,我們將深入研究Java中責任鏈模式的定

    2024年01月24日
    瀏覽(23)
  • 【玩轉23種Java設計模式】行為型模式篇:模板模式

    軟件設計模式(Design pattern),又稱設計模式,是一套被反復使用、多數人知曉的、經過分類編目的、代碼設計經驗的總結。使用設計模式是為了可重用代碼、讓代碼更容易被他人理解、保證代碼可靠性、程序的重用性。 匯總目錄鏈接:【玩轉23種Java設計模式】學習目錄匯總

    2024年02月16日
    瀏覽(21)
  • 【玩轉23種Java設計模式】行為型模式篇:責任鏈模式

    軟件設計模式(Design pattern),又稱設計模式,是一套被反復使用、多數人知曉的、經過分類編目的、代碼設計經驗的總結。使用設計模式是為了可重用代碼、讓代碼更容易被他人理解、保證代碼可靠性、程序的重用性。 匯總目錄鏈接:【玩轉23種Java設計模式】學習目錄匯總

    2024年02月13日
    瀏覽(18)
  • Java設計模式之行為型-狀態(tài)模式(UML類圖+案例分析)

    Java設計模式之行為型-狀態(tài)模式(UML類圖+案例分析)

    目錄 一、基礎概念 二、UML類圖 三、角色設計 四、案例分析 五、總結 狀態(tài)模式允許一個對象在其內部狀態(tài)改變時改變它的行為,對象看起來似乎修改了它的類,狀態(tài)模式主要解決的是當控制一個對象狀態(tài)轉換的條件表達式過于復雜時的情況,把狀態(tài)的判斷邏輯轉移到表示不

    2024年02月16日
    瀏覽(20)

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

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

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

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

二維碼1

領取紅包

二維碼2

領紅包