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

設(shè)計(jì)模式二十二:策略模式(Strategy Pattern)

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

定義一系列算法,將每個(gè)算法封裝成獨(dú)立的對(duì)象,并使這些對(duì)象可互相替換。這使得在運(yùn)行時(shí)可以動(dòng)態(tài)地選擇算法,而不必改變使用算法的客戶(hù)端代碼。策略模式的主要目標(biāo)是將算法的定義與使用分離,使得客戶(hù)端可以根據(jù)需要靈活地選擇和切換不同的算法,而不影響到客戶(hù)端代碼的穩(wěn)定性。

策略模式的使用場(chǎng)景

  1. 多種算法實(shí)現(xiàn):
    當(dāng)一個(gè)問(wèn)題有多種算法實(shí)現(xiàn)時(shí),可以使用策略模式來(lái)將這些算法封裝成獨(dú)立的策略類(lèi),使得這些算法可以互相替換,而不影響客戶(hù)端代碼。
  2. 避免條件判斷:
    當(dāng)存在大量的條件語(yǔ)句來(lái)選擇不同的行為時(shí),可以使用策略模式將這些行為封裝成策略類(lèi),從而減少條件判斷,提高代碼的可讀性和可維護(hù)性。
  3. 算法變化頻繁:
    如果系統(tǒng)中的算法經(jīng)常需要變化,使用策略模式可以方便地新增、修改和替換算法,而不必修改客戶(hù)端代碼。
  4. 開(kāi)閉原則支持:
    策略模式支持開(kāi)閉原則,可以在不修改已有代碼的情況下擴(kuò)展系統(tǒng)功能。
  5. 分層架構(gòu):
    在分層架構(gòu)中,策略模式可以用于將業(yè)務(wù)邏輯與具體的實(shí)現(xiàn)分離,使得業(yè)務(wù)邏輯層和具體實(shí)現(xiàn)層解耦。
  6. 配置靈活性:
    當(dāng)需要根據(jù)配置文件或用戶(hù)輸入來(lái)選擇不同的行為時(shí),策略模式可以提供靈活的配置方式。
  7. 測(cè)試和維護(hù)性:
    由于策略模式將不同的算法分離成獨(dú)立的策略類(lèi),可以更方便地進(jìn)行單元測(cè)試和維護(hù)。

策略模式主要角色

  1. 策略接口
    定義了一組算法的共同接口,具體策略類(lèi)需要實(shí)現(xiàn)這個(gè)接口。它通常包含一個(gè)或多個(gè)抽象方法,用于定義不同算法的行為。
  2. 具體策略類(lèi)
    實(shí)現(xiàn)了策略接口,即具體的算法邏輯。每個(gè)具體策略類(lèi)負(fù)責(zé)實(shí)現(xiàn)一個(gè)特定的算法。具體策略類(lèi)之間是可以相互替換的,客戶(hù)端代碼不需要知道具體算法的實(shí)現(xiàn)細(xì)節(jié)。
  3. 上下文
    持有一個(gè)策略對(duì)象,并在需要時(shí)調(diào)用策略的方法。上下文將算法的執(zhí)行委托給具體的策略對(duì)象。上下文也可以包含一些輔助方法,用于操作策略對(duì)象。

策略模式的流程

  1. 客戶(hù)端創(chuàng)建一個(gè)上下文對(duì)象,并設(shè)置具體的策略對(duì)象。
  2. 當(dāng)客戶(hù)端需要執(zhí)行特定算法時(shí),它調(diào)用上下文的方法,上下文會(huì)將請(qǐng)求委托給具體策略對(duì)象
  3. 具體策略對(duì)象執(zhí)行算法,并將結(jié)果返回給上下文,上下文將結(jié)果傳遞給客戶(hù)端。

策略模式j(luò)ava代碼示例

實(shí)現(xiàn)一生鮮市場(chǎng)到點(diǎn)打折活動(dòng)
策略接口

// 策略接口
public interface DiscountStrategy {
    double applyDiscount(double originalPrice);
}

策略實(shí)現(xiàn)類(lèi)

public class RegularDiscount implements DiscountStrategy{
    @Override
    public double applyDiscount(double originalPrice) {
        return originalPrice;//原價(jià)
    }
}


public class SaleDiscount implements DiscountStrategy {
    @Override
    public double applyDiscount(double originalPrice) {
        return originalPrice*0.8;//8折
    }
}

public class SpecialDiscount  implements DiscountStrategy{
    @Override
    public double applyDiscount(double originalPrice) {
        return originalPrice*0.5;//5折
    }
}

上下文

// 上下文類(lèi)
public class ShoppingCart{
    private DiscountStrategy discountStrategy;

    public void setDiscountStrategy(DiscountStrategy discountStrategy) {
        this.discountStrategy = discountStrategy;
    }

    //獲取最新價(jià)格
    public double getPrice(double regularPrice){
        return discountStrategy.applyDiscount(regularPrice);
    }

}

客戶(hù)端

public static void main(String[] args) {
    ShoppingCart cart = new ShoppingCart();
    double originalPrice = 100.0;
    double discountedPrice;
    cart.setDiscountStrategy(new RegularDiscount());
    discountedPrice = cart.getPrice(originalPrice);
    System.out.println("8點(diǎn)價(jià)格:"+discountedPrice);

    cart.setDiscountStrategy(new SaleDiscount());
    discountedPrice = cart.getPrice(originalPrice);
    System.out.println("9點(diǎn)價(jià)格:"+discountedPrice);

    cart.setDiscountStrategy(new SpecialDiscount());
    discountedPrice = cart.getPrice(originalPrice);
    System.out.println("10點(diǎn)價(jià)格:"+discountedPrice);
}

輸出

8點(diǎn)價(jià)格:100.0
9點(diǎn)價(jià)格:80.0
10點(diǎn)價(jià)格:50.0

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

優(yōu)點(diǎn):

  1. 靈活性高: 策略模式使得算法可以獨(dú)立地變化,而不會(huì)影響到客戶(hù)端代碼??梢噪S時(shí)切換或擴(kuò)展算法,而無(wú)需修改客戶(hù)端。
  2. 可維護(hù)性好: 每個(gè)具體策略類(lèi)都具備清晰的職責(zé),使得代碼更加模塊化和可讀。新增或修改算法時(shí),只需修改相應(yīng)的策略類(lèi),不影響其他部分
  3. 遵循開(kāi)閉原則: 策略模式支持開(kāi)閉原則,可以在不修改已有代碼的情況下添加新的策略類(lèi)
  4. 消除條件判斷: 策略模式可以避免大量的條件判斷,將不同的行為封裝到不同的策略類(lèi)中,使得代碼更加簡(jiǎn)潔
  5. 可測(cè)試性強(qiáng): 每個(gè)策略類(lèi)都是相對(duì)獨(dú)立的,易于進(jìn)行單元測(cè)試。

缺點(diǎn):文章來(lái)源地址http://www.zghlxwxcb.cn/news/detail-667558.html

  1. 類(lèi)數(shù)量增多: 策略模式會(huì)引入多個(gè)具體策略類(lèi),可能導(dǎo)致類(lèi)的數(shù)量增多,增加了代碼的復(fù)雜度。
  2. 客戶(hù)端需要了解策略: 客戶(hù)端需要了解不同的策略類(lèi),并選擇適當(dāng)?shù)牟呗?,這可能在某些情況下增加了客戶(hù)端的復(fù)雜度
  3. 增加對(duì)象數(shù)量: 每個(gè)策略類(lèi)都是一個(gè)對(duì)象,可能會(huì)增加系統(tǒng)的對(duì)象數(shù)量。在某些情況下,可以通過(guò)共享策略對(duì)象來(lái)緩解這個(gè)問(wèn)題
  4. 上下文類(lèi)復(fù)雜: 上下文類(lèi)需要持有一個(gè)策略對(duì)象,并在運(yùn)行時(shí)選擇合適的策略。在某些情況下,可能會(huì)使上下文類(lèi)變得復(fù)雜

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

本文來(lái)自互聯(lián)網(wǎng)用戶(hù)投稿,該文觀點(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)文章

  • 【設(shè)計(jì)模式-02】Strategy策略模式及應(yīng)用場(chǎng)景

    Java 官方文檔 Overview (Java SE 18 JDK 18) module index https://docs.oracle.com/en/java/javase/18/docs/api/index.html Java中使用到的策略模式 Comparator、comparable Comparator (Java SE 18 JDK 18) declaration: module: java.base, package: java.util, interface: Comparator https://docs.oracle.com/en/java/javase/18/docs/api/java.base/java/util/Compar

    2024年01月16日
    瀏覽(22)
  • 【設(shè)計(jì)模式-03】Strategy策略模式及應(yīng)用場(chǎng)景

    【設(shè)計(jì)模式-03】Strategy策略模式及應(yīng)用場(chǎng)景

    Java 官方文檔 Overview (Java SE 18 JDK 18) module index https://docs.oracle.com/en/java/javase/18/docs/api/index.html Java中使用到的策略模式 Comparator、comparable Comparator (Java SE 18 JDK 18) declaration: module: java.base, package: java.util, interface: Comparator https://docs.oracle.com/en/java/javase/18/docs/api/java.base/java/util/Compar

    2024年01月22日
    瀏覽(24)
  • C++設(shè)計(jì)模式_04_Strategy 策略模式

    接上篇,本篇將會(huì)介紹C++設(shè)計(jì)模式中的 Strategy 策略模式 ,和上篇 模板方法Template Method 一樣,仍屬于“組件協(xié)作”模式,它與Template Method有著異曲同工之妙。 在軟件構(gòu)建過(guò)程中,某些對(duì)象使用的算法可能多種多樣?

    2024年02月09日
    瀏覽(19)
  • 設(shè)計(jì)模式十二:享元模式(Flyweight Pattern)

    當(dāng)我們需要?jiǎng)?chuàng)建大量相似對(duì)象時(shí),享元模式可以幫助我們節(jié)省內(nèi)存空間和提高性能。該模式通過(guò)共享相同的數(shù)據(jù)來(lái)減少對(duì)象的數(shù)量。 在享元模式中,有兩種類(lèi)型的對(duì)象:享元(Flyweight)和非享元(Unshared Flyweight)。享元對(duì)象是可共享的,它包含內(nèi)部狀態(tài)和外部狀態(tài)。內(nèi)部狀態(tài)

    2024年02月14日
    瀏覽(17)
  • 【設(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è)父類(lèi)Duck,如果是相同的行為就繼承,不同行為就重寫(xiě)方法 實(shí)現(xiàn) 【鴨子抽象類(lèi)】 【野鴨】 【北京鴨】 【玩具鴨】

    2024年02月12日
    瀏覽(35)
  • 策略模式【Strategy Pattern】

    策略模式【Strategy Pattern】

    劉備要到江東娶老婆了,走之前諸葛亮給趙云(伴郎)三個(gè)錦囊妙計(jì),說(shuō)是按天機(jī)拆開(kāi)解決棘手問(wèn)題, 嘿,還別說(shuō),真是解決了大問(wèn)題,搞到最后是周瑜陪了夫人又折兵呀,那咱們先看看這個(gè)場(chǎng)景是什么樣子 的。 1 先說(shuō)這個(gè)場(chǎng)景中的要素: 三個(gè)妙計(jì) 一個(gè)錦囊 一個(gè)趙云 妙計(jì)

    2024年02月13日
    瀏覽(24)
  • 策略模式(Strategy Pattern)

    策略模式(Strategy Pattern)

    ??在策略模式(Strategy Pattern)中,一個(gè)類(lèi)的行為或其算法可以在運(yùn)行時(shí)更改。這種類(lèi)型的設(shè)計(jì)模式屬于行為型模式。 意圖:定義一系列的算法,把它們一個(gè)個(gè)封裝起來(lái), 并且使它們可相互替換。 主要解決:在有多種算法相似的情況下,使用 if...else 所帶來(lái)的復(fù)雜和難以維護(hù)

    2024年02月05日
    瀏覽(25)
  • 設(shè)計(jì)模式二十一:狀態(tài)模式(State Pattern)

    一個(gè)對(duì)象的內(nèi)部狀態(tài)發(fā)生變化時(shí),允許對(duì)象改變其行為。這種模式使得一個(gè)對(duì)象看起來(lái)好像在運(yùn)行時(shí)改變了它的類(lèi),主要目的是將狀態(tài)的行為從主要對(duì)象中分離出來(lái),使得主要對(duì)象不必包含所有狀態(tài)的邏輯,而是將每個(gè)狀態(tài)的行為封裝在獨(dú)立的類(lèi)中。這有助于減少代碼的重復(fù)

    2024年02月11日
    瀏覽(18)
  • 設(shè)計(jì)模式二十:觀察者模式(Observer Pattern)

    定義了一種一對(duì)多的依賴(lài)關(guān)系,允許多個(gè)觀察者(也稱(chēng)為訂閱者)對(duì)象同時(shí)監(jiān)聽(tīng)一個(gè)主題對(duì)象,當(dāng)主題對(duì)象發(fā)生變化時(shí),所有依賴(lài)于它的觀察者都會(huì)收到通知并自動(dòng)更新。 觀察者模式的使用場(chǎng)景 觀察者模式在許多場(chǎng)景中都可以發(fā)揮作用,特別是在需要解耦和實(shí)現(xiàn)對(duì)象間動(dòng)態(tài)

    2024年02月12日
    瀏覽(21)
  • 設(shè)計(jì)模式二十三:模板方法模式(Template Method Pattern)

    定義了一個(gè)算法的框架,將算法的具體步驟延遲到子類(lèi)中實(shí)現(xiàn)。這樣可以在不改變算法結(jié)構(gòu)的情況下,允許子類(lèi)重寫(xiě)算法的特定步驟以滿(mǎn)足自己的需求 模版方法使用場(chǎng)景 算法框架固定,但具體步驟可以變化:當(dāng)你有一個(gè)算法的整體結(jié)構(gòu)是固定的,但其中某些步驟的實(shí)現(xiàn)可能

    2024年02月11日
    瀏覽(23)

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

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

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

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

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包