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

【設(shè)計模式--行為型--策略模式】

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

策略模式

定義

該模式定義了一系列算法,并將每個算法封裝起來,使他們可以相互替換,且算法的變化不會影響使用算法的客戶。策略模式屬于對象行為模式,它通過對算法進行封裝,把使用算法的責(zé)任和算法的實現(xiàn)分隔開,并委派給不同的對象對這些算法進行管理。

結(jié)構(gòu)

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

案例

推銷員上面推銷產(chǎn)品,有多種推銷方案,對不同的人使用不同的方案。
類圖:
【設(shè)計模式--行為型--策略模式】,設(shè)計模式,設(shè)計模式,策略模式

/**
 * 抽象策略類
 */
public interface Strategy {
    void show();
}
/**
 * 具體策略類  封裝算法
 */
public class StrategyA implements Strategy{
    @Override
    public void show() {
        System.out.println("買一送二");
    }
}
/**
 * 具體策略類  封裝算法
 */
public class StrategyB implements Strategy{
    @Override
    public void show() {
        System.out.println("滿200減20");
    }
}
/**
 * 具體策略類  封裝算法
 */
public class StrategyC implements Strategy{
    @Override
    public void show() {
        System.out.println("8.8折");
    }
}
/**
 * 促銷類  環(huán)境類
 */
public class SalesMan {
    // 聚合策略類
    private Strategy strategy;

    public SalesMan(Strategy strategy) {
        this.strategy = strategy;
    }
    // 給用戶展示促銷活動
    public void SalesManShow(){
        strategy.show();
    }

    public Strategy getStrategy() {
        return strategy;
    }

    public void setStrategy(Strategy strategy) {
        this.strategy = strategy;
    }
}
public class Test01 {
    public static void main(String[] args) {
        // 使用a促銷方案
        SalesMan salesMan = new SalesMan(new StrategyA());
        salesMan.SalesManShow();

        // 使用b促銷方案
        salesMan.setStrategy(new StrategyB());
        salesMan.SalesManShow();

        // 使用c促銷方案
        salesMan.setStrategy(new StrategyC());
        salesMan.SalesManShow();
    }
}

【設(shè)計模式--行為型--策略模式】,設(shè)計模式,設(shè)計模式,策略模式文章來源地址http://www.zghlxwxcb.cn/news/detail-758578.html

優(yōu)缺點

  • 優(yōu)點
    • 策略類之間可以自由切換,由于策略類都實現(xiàn)同一個接口,所以它們之間可以自由切換。
    • 易于擴展,增加一個新的策略只需要添加一個具體的策略類即可,基本不需要改變原有的代碼,符合開閉原則。避免使用多重條件語句(if else),充分體現(xiàn)面向?qū)ο笤O(shè)計思想
  • 缺點
    • 客戶端必須知道所有的策略類,并自行決定使用哪一個策略類。
    • 策略模式將造成產(chǎn)生很多策略類,可以通過使用享元模式在一定程度上減少對象的數(shù)量。

使用場景

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

到了這里,關(guān)于【設(shè)計模式--行為型--策略模式】的文章就介紹完了。如果您還想了解更多內(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īng)查實,立即刪除!

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

相關(guān)文章

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

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

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

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

    軟件設(shè)計模式與體系結(jié)構(gòu)-設(shè)計模式-行為型軟件設(shè)計模式-策略模式

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

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

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

    2024年02月10日
    瀏覽(20)
  • 設(shè)計模式行為模式-命令模式

    設(shè)計模式行為模式-命令模式

    命令模式(Command Pattern)是一種行為型設(shè)計模式,用于將請求封裝為對象,從而使你可以使用不同的請求、隊列或者日志請求來參數(shù)化其他對象。這樣可以實現(xiàn)請求的參數(shù)化操作、隊列化和日志化,且能夠支持撤銷操作。 命令模式由以下幾個核心組件組成: 命令(Command)

    2024年02月10日
    瀏覽(29)
  • 設(shè)計模式行為型——命令模式

    設(shè)計模式行為型——命令模式

    目錄 命令模式的定義? ? ? 命令模式的實現(xiàn) 命令模式角色 命令模式類圖 命令模式舉例 命令模式代碼實現(xiàn) 命令模式的特點 優(yōu)點 缺點 使用場景 注意事項 ????????命令模式(Command Pattern)是一種數(shù)據(jù)驅(qū)動的設(shè)計模式,它屬于行為型模式。是對命令的封裝,每一個命令都是

    2024年02月14日
    瀏覽(26)
  • 【設(shè)計模式--行為型--命令模式】

    【設(shè)計模式--行為型--命令模式】

    定義 將一個請求封裝為一個對象,使發(fā)出請求的責(zé)任和執(zhí)行請求的責(zé)任分割開。這樣兩者之間通過命令對象進行溝通,這樣方便將命令對象進行存儲,傳遞,調(diào)用,增加與管理。 結(jié)構(gòu) 抽象命令類(Command)角色:定義命令的接口,聲明執(zhí)行的方法。 具體命令(Concrete Command)

    2024年02月04日
    瀏覽(24)
  • 行為型設(shè)計模式——狀態(tài)模式

    行為型設(shè)計模式——狀態(tài)模式

    狀態(tài)模式是比較簡單的設(shè)計模式,它的主要作用是減少代碼中大量的 if-else 或者 switch-case 等邏輯判斷(俗稱屎山)。它將每個狀態(tài)定義為一個類,而每個狀態(tài)類有自己對應(yīng)的方法,因此當(dāng)需要根據(jù)狀態(tài)執(zhí)行邏輯代碼時不需要寫大量的if-else判斷是哪個狀態(tài)然后執(zhí)行對應(yīng)的邏輯

    2024年02月02日
    瀏覽(30)
  • 設(shè)計模式行為型-狀態(tài)模式

    設(shè)計模式行為型-狀態(tài)模式

    狀態(tài)模式是一種行為型設(shè)計模式,用于處理對象在不同狀態(tài)下的行為變化。它將對象的行為封裝在不同狀態(tài)類中,通過狀態(tài)的切換實現(xiàn)不同行為的觸發(fā)。 本文將介紹狀態(tài)模式的基本概念、應(yīng)用場景以及優(yōu)勢與適用性。 實現(xiàn)具體狀態(tài)類 具體工作類: 上下文類包含狀態(tài)對象的引

    2024年02月10日
    瀏覽(25)
  • 設(shè)計模式行為型——模板模式

    設(shè)計模式行為型——模板模式

    目錄 模板模式的定義 模板模式的實現(xiàn) 模板模式角色 模板模式類圖 模板模式舉例 模板模式代碼實現(xiàn) 模板模式的特點 優(yōu)點 缺點 使用場景 注意事項 實際應(yīng)用 ????????模板模式(Template Pattern)屬于行為型設(shè)計模式,又叫模版方法模式(Template Method Pattern),是指定義一個算法

    2024年02月13日
    瀏覽(24)
  • 設(shè)計模式之行為型模式

    意圖:定義對象間的一種一對多的依賴關(guān)系,當(dāng)一個對象的狀態(tài)發(fā)生改變時,所有依賴于它的對象都得到通知并被自動更新。 觀察者模式包含以下幾個核心角色: 主題(Subject):也稱為被觀察者或可觀察者,它是具有狀態(tài)的對象,并維護著一個觀察者列表。主題提供了添加

    2024年01月18日
    瀏覽(15)

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

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

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

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

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包