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

【C++ 設(shè)計(jì)模式】策略模式與簡單工廠模式的結(jié)合

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


前言

在軟件設(shè)計(jì)中,常常會(huì)遇到需要根據(jù)不同情況選擇不同算法或行為的情況。策略模式和簡單工廠模式是兩種常見的設(shè)計(jì)模式,它們分別解決了對(duì)象行為的抽象和對(duì)象創(chuàng)建的抽象問題。在某些情況下,將這兩種模式結(jié)合起來可以更好地滿足實(shí)際需求,提高代碼的靈活性和可維護(hù)性。

策略模式與簡單工廠模式的結(jié)合:

策略模式用于定義一系列算法,將每個(gè)算法封裝到獨(dú)立的類中,并使它們可以相互替換,從而使得算法可以獨(dú)立于客戶端而變化。簡單工廠模式用于封裝對(duì)象的創(chuàng)建過程,將對(duì)象的創(chuàng)建與客戶端解耦。

將策略模式與簡單工廠模式結(jié)合起來,可以使得在創(chuàng)建具體策略對(duì)象時(shí)更加靈活,同時(shí)保持了策略對(duì)象的封裝性。通過簡單工廠模式,我們可以根據(jù)客戶端的需求動(dòng)態(tài)創(chuàng)建不同的具體策略對(duì)象,而策略模式則確保了這些對(duì)象可以被客戶端無縫地使用。


一、為什么需要策略模式+簡單工廠模式

當(dāng)我們面對(duì)需要根據(jù)不同情況選擇不同算法或行為的情況時(shí),策略模式是一個(gè)很好的選擇。它允許我們將不同的算法封裝成獨(dú)立的類,并且可以在運(yùn)行時(shí)靈活地切換這些算法,而不影響客戶端代碼。然而,單獨(dú)使用策略模式時(shí),我們需要在客戶端代碼中顯式地創(chuàng)建具體策略對(duì)象,這可能導(dǎo)致代碼變得復(fù)雜,尤其當(dāng)需要根據(jù)不同條件選擇不同的策略時(shí)。

這時(shí)候,簡單工廠模式可以派上用場。簡單工廠模式提供了一個(gè)統(tǒng)一的接口來創(chuàng)建對(duì)象,客戶端只需提供簡單的參數(shù),而不必了解具體對(duì)象的創(chuàng)建過程。將策略模式與簡單工廠模式結(jié)合起來,可以在需要時(shí)動(dòng)態(tài)地創(chuàng)建不同的具體策略對(duì)象,同時(shí)保持代碼的簡潔和可維護(hù)性。簡單工廠模式負(fù)責(zé)對(duì)象的創(chuàng)建,而策略模式確保了這些對(duì)象可以被靈活地使用,讓我們的軟件更加智能和適應(yīng)變化。這種結(jié)合使用的設(shè)計(jì)模式能夠提高代碼的靈活性、可擴(kuò)展性和可維護(hù)性,使得軟件系統(tǒng)更加健壯和易于理解。

二、策略模式+簡單工廠模式實(shí)現(xiàn)原理

  • 策略模式:

首先定義一個(gè)策略接口(或抽象類),其中包含定義了一系列算法的方法。
創(chuàng)建具體的策略類,分別實(shí)現(xiàn)策略接口中的方法,每個(gè)具體策略類代表一個(gè)具體的算法。
在客戶端中,持有一個(gè)策略接口的指針(或引用),可以動(dòng)態(tài)切換不同的具體策略對(duì)象。
當(dāng)客戶端需要使用某個(gè)具體的算法時(shí),調(diào)用策略接口中定義的方法即可。

  • 簡單工廠模式:

創(chuàng)建一個(gè)工廠類,負(fù)責(zé)根據(jù)傳入的參數(shù)來創(chuàng)建具體的對(duì)象。
工廠類中包含一個(gè)方法,根據(jù)不同的參數(shù)返回不同的具體對(duì)象實(shí)例。

  • 結(jié)合實(shí)現(xiàn)原理:

在策略模式中,客戶端通常需要顯式地創(chuàng)建具體策略對(duì)象,這可能會(huì)導(dǎo)致代碼的復(fù)雜性。
為了解決這個(gè)問題,可以將具體策略對(duì)象的創(chuàng)建委托給簡單工廠,通過簡單工廠模式動(dòng)態(tài)地創(chuàng)建具體的策略對(duì)象。
這樣,客戶端只需要和簡單工廠打交道,向工廠傳遞參數(shù)即可獲取所需的具體策略對(duì)象,而無需直接創(chuàng)建對(duì)象。
當(dāng)需要在運(yùn)行時(shí)根據(jù)不同條件選擇不同的策略時(shí),可以通過簡單工廠來創(chuàng)建不同的策略對(duì)象,然后使用策略模式來執(zhí)行具體的算法。

三、UML圖

【C++ 設(shè)計(jì)模式】策略模式與簡單工廠模式的結(jié)合,C++ 設(shè)計(jì)模式,c++,設(shè)計(jì)模式,策略模式,uml,開發(fā)語言,簡單工廠模式,c語言
通過UML圖可以發(fā)現(xiàn)簡單工廠模式和策略模式+簡單工廠模式非常的像??!其主要差別就是工廠生成的類有一個(gè)統(tǒng)一執(zhí)行的函數(shù)execute函數(shù)用來變成策略模式,進(jìn)而就有了策略模式的特征了

四、示例代碼

#include <iostream>
#include <memory>

// 抽象策略類
class Strategy {
public:
    virtual void execute() const = 0;
    virtual ~Strategy() {}
};

// 具體策略類 A
class ConcreteStrategyA : public Strategy {
public:
    void execute() const override {
        std::cout << "Executing strategy A\n";
    }
};

// 具體策略類 B
class ConcreteStrategyB : public Strategy {
public:
    void execute() const override {
        std::cout << "Executing strategy B\n";
    }
};

// 工廠類,用于創(chuàng)建具體策略對(duì)象
class StrategyFactory {
public:
    static Strategy* createStrategy(char type) {
        switch (type) {
        case 'A':
            return new ConcreteStrategyA;
        case 'B':
            return new ConcreteStrategyB;
        default:
            throw std::invalid_argument("Invalid strategy type");
        }
    }
};

int main() {
    // 使用工廠類創(chuàng)建具體策略對(duì)象
    auto strategyA = StrategyFactory::createStrategy('A');
    auto strategyB = StrategyFactory::createStrategy('B');

    // 執(zhí)行策略
    strategyA->execute();
    strategyB->execute();

    return 0;
}

【C++ 設(shè)計(jì)模式】策略模式與簡單工廠模式的結(jié)合,C++ 設(shè)計(jì)模式,c++,設(shè)計(jì)模式,策略模式,uml,開發(fā)語言,簡單工廠模式,c語言
抽象策略類(Strategy):定義了執(zhí)行策略的接口 execute(),所有具體策略類都要實(shí)現(xiàn)這個(gè)接口。

具體策略類(ConcreteStrategyA 和 ConcreteStrategyB):實(shí)現(xiàn)了具體的策略,分別是策略 A 和策略 B。它們提供了不同的行為實(shí)現(xiàn)方式。

工廠類(StrategyFactory):用于創(chuàng)建具體策略對(duì)象。createStrategy 方法根據(jù)傳入的參數(shù)類型決定創(chuàng)建哪種具體策略對(duì)象。

主函數(shù)(main):在 main 函數(shù)中,通過工廠類創(chuàng)建了具體的策略對(duì)象 strategyA 和 strategyB,分別對(duì)應(yīng)策略 A 和策略 B。然后調(diào)用這些策略對(duì)象的 execute() 方法執(zhí)行相應(yīng)的策略。

實(shí)現(xiàn)決策的原理在于通過工廠類的 createStrategy 方法根據(jù)輸入的參數(shù)類型來動(dòng)態(tài)創(chuàng)建具體的策略對(duì)象。這種方式使得客戶端代碼與具體策略對(duì)象的創(chuàng)建過程解耦,同時(shí)利用了策略模式的靈活性,能夠在運(yùn)行時(shí)動(dòng)態(tài)地切換不同的策略。


總結(jié)

策略模式與簡單工廠模式的結(jié)合,能夠很好地將對(duì)象的行為和對(duì)象的創(chuàng)建分離,使得系統(tǒng)更具靈活性和可擴(kuò)展性。通過將具體策略對(duì)象的創(chuàng)建委托給簡單工廠,我們可以在不改變客戶端代碼的情況下動(dòng)態(tài)地切換不同的策略,從而更好地滿足不同的業(yè)務(wù)需求。這種結(jié)合使用的設(shè)計(jì)模式在實(shí)際項(xiàng)目中具有廣泛的應(yīng)用價(jià)值,可以幫助我們更好地組織和管理代碼結(jié)構(gòu),提高代碼的可維護(hù)性和可擴(kuò)展性。文章來源地址http://www.zghlxwxcb.cn/news/detail-840624.html

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

本文來自互聯(lián)網(wǎng)用戶投稿,該文觀點(diǎn)僅代表作者本人,不代表本站立場。本站僅提供信息存儲(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ì)模式:策略模式和工廠模式混合使用

    有時(shí)單個(gè)設(shè)計(jì)模式并不能滿足我們的業(yè)務(wù)需求,這個(gè)時(shí)候就要根據(jù)具體的業(yè)務(wù)來混合使用設(shè)計(jì)模式,其中策略模式和工廠模式是比較常用的一個(gè)組合。工廠模式可以管理具體策略的生命周期,策略模式可以豐滿具體細(xì)節(jié)的邏輯。 在這個(gè)示例中,我們定義了一個(gè)策略接口和兩個(gè)

    2024年02月07日
    瀏覽(23)
  • 設(shè)計(jì)模式-策略工廠

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

    在介紹策略工廠的實(shí)現(xiàn)前,我們要先了解spring中beanFactory: BeanFactory 作為IOC服務(wù)的提供者,通過XmlBeanFactory來得到實(shí)例 生產(chǎn)Bean的工廠,采用延遲初始化策略(只有在需要某個(gè)對(duì)象時(shí),才進(jìn)行初始化和依賴注入); 通常會(huì)用xml文件來注冊(cè)并管理各個(gè)業(yè)務(wù)對(duì)象之間的依賴關(guān)系

    2024年02月11日
    瀏覽(20)
  • 自學(xué)設(shè)計(jì)模式(簡單工廠模式、工廠模式、抽象工廠模式)

    使用工廠模式來生產(chǎn)某類對(duì)象(代碼簡化且容易維護(hù),類之間有血緣關(guān)系,可以通過工廠類進(jìn)行生產(chǎn)); 簡單工廠模式(用于創(chuàng)建簡單對(duì)象) 對(duì)于簡單工廠模式,需要的工廠類只有一個(gè); 在工廠類中的公共成員函數(shù)來創(chuàng)建所需對(duì)象; 工廠模式 簡單工廠模式會(huì)違反開放封閉

    2024年02月11日
    瀏覽(27)
  • 設(shè)計(jì)模式(二)、工廠模式--簡單工廠模式

    簡單工廠模式:又叫做靜態(tài)工廠方法模式,是由一個(gè)工廠對(duì)象決定創(chuàng)建出哪一種產(chǎn)品類的實(shí)例。 需要注意的是:簡單工廠模式屬于創(chuàng)建型模式,但不屬于23種GOF設(shè)計(jì)模式之一? 該模式主要有以下幾個(gè)模塊構(gòu)成: 具體說明結(jié)合代碼,如下: 代碼中主要是有一個(gè)cake接父類,兩個(gè)

    2024年02月13日
    瀏覽(22)
  • Python入門【?編輯、組合、設(shè)計(jì)模式_工廠模式實(shí)現(xiàn) 、設(shè)計(jì)模式_單例模式實(shí)現(xiàn)、工廠和單例模式結(jié)合、異常是什么?異常的解決思路 】(十七)

    Python入門【?編輯、組合、設(shè)計(jì)模式_工廠模式實(shí)現(xiàn) 、設(shè)計(jì)模式_單例模式實(shí)現(xiàn)、工廠和單例模式結(jié)合、異常是什么?異常的解決思路 】(十七)

    ??作者簡介:大家好,我是愛敲代碼的小王,CSDN博客博主,Python小白 ??系列專欄:python入門到實(shí)戰(zhàn)、Python爬蟲開發(fā)、Python辦公自動(dòng)化、Python數(shù)據(jù)分析、Python前后端開發(fā) ??如果文章知識(shí)點(diǎn)有錯(cuò)誤的地方,請(qǐng)指正!和大家一起學(xué)習(xí),一起進(jìn)步?? ??如果感覺博主的文章還不錯(cuò)的

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

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

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

    2024年02月10日
    瀏覽(29)
  • 設(shè)計(jì)模式-簡單工廠模式(靜態(tài)工廠模式)java實(shí)現(xiàn)

    設(shè)計(jì)模式-簡單工廠模式(靜態(tài)工廠模式)java實(shí)現(xiàn)

    簡單工廠模式根據(jù)所 提供的參數(shù) 數(shù)據(jù)返回幾個(gè)可能類中的一個(gè)類的實(shí)例。通常返回的類都有一個(gè)公共的父類和公共的方法。 ? 意圖 提供一個(gè)類,負(fù)責(zé)根據(jù)一定的條件創(chuàng)建某一具體類的實(shí)例。同時(shí)使用工廠模式也是為了隱藏創(chuàng)建對(duì)象的過程 角色及其職責(zé) (1)工廠(Creator)角色

    2024年02月13日
    瀏覽(29)
  • 【設(shè)計(jì)模式】簡單工廠模式

    【設(shè)計(jì)模式】簡單工廠模式

    分析: 這一題看上去很簡單,但如果面試時(shí)你寫的是下面這種代碼,那大概率是過不了的。 上面代碼也能實(shí)現(xiàn)題目的功能,但是代碼沒有錯(cuò)就是好的嗎? 以上代碼復(fù)用性低;可維護(hù)性差,如果要改+的邏輯,就會(huì)牽一發(fā)而動(dòng)全身;擴(kuò)展性差,如果這個(gè)時(shí)候新增開平方的邏輯怎

    2024年02月12日
    瀏覽(25)
  • 設(shè)計(jì)模式-簡單工廠模式

    簡單工廠模式又稱為靜態(tài)工廠模式,其實(shí)就是根據(jù)傳入?yún)?shù)創(chuàng)建對(duì)應(yīng)具體類的實(shí)例并返回實(shí)例對(duì)象,這些類通常繼承至同一個(gè)父類,該模式專門定義了一個(gè)類來負(fù)責(zé)創(chuàng)建其他類的實(shí)例。 ?這就是工廠類,提供一個(gè)方法創(chuàng)建具體類的實(shí)例 優(yōu)點(diǎn):將對(duì)象的創(chuàng)建于使用分離,創(chuàng)建完

    2024年02月12日
    瀏覽(22)
  • 設(shè)計(jì)模式(簡單工廠模式)

    從建筑設(shè)計(jì)領(lǐng)域引入到計(jì)算機(jī)科學(xué)中 設(shè)計(jì)模式一共有23種 代碼設(shè)計(jì)經(jīng)驗(yàn)的總結(jié),穩(wěn)定,拓展性更強(qiáng)。一系列編程思想 作用:代碼更容易被他人理解、保證代碼可靠性、程序的重用性。 詳細(xì)介紹:[https://www.runoob.com/design-pattern/design-pattern-tutorial.html]: 學(xué)習(xí)簡單工廠模式的目的:

    2024年02月13日
    瀏覽(18)

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

支付寶掃一掃打賞

博客贊助

微信掃一掃打賞

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

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

二維碼1

領(lǐng)取紅包

二維碼2

領(lǐng)紅包