C++策略模式

  1. 1 簡介: 策略模式是一種行為型設計模式,用于在運行時根據不同的情況選擇不同的算法或行為。它將算法封裝成一個個具體的策略類,并使這些策略類可以相互替換,以達到動態改變對象的行為的目的。

  2. 2 實現步驟: 以下是使用C++實現策略模式的步驟:

    a. 定義策略接口:首先,定義一個策略接口,該接口聲明了策略類中的算法方法。

    class Strategy {
    public:virtual void doAlgorithm() = 0;
    };
    

    b. 實現具體策略類:創建實現策略接口的具體策略類,每個具體策略類都實現了算法方法。

    class ConcreteStrategyA : public Strategy {
    public:void doAlgorithm() override {// 具體策略A的算法實現}
    };class ConcreteStrategyB : public Strategy {
    public:void doAlgorithm() override {// 具體策略B的算法實現}
    };
    

    c. 創建環境類:創建一個環境類,用于保存當前使用的策略對象,并且提供一個方法來改變策略對象。

    class Context {
    private:Strategy* strategy;public:void setStrategy(Strategy* newStrategy) {strategy = newStrategy;}void executeAlgorithm() {strategy->doAlgorithm();}
    };
    

    3?示例代碼: 以下是一個使用策略模式的示例代碼:

    #include <iostream>int main() {// 創建環境對象Context context;// 創建具體策略AStrategy* strategyA = new ConcreteStrategyA();// 設置具體策略Acontext.setStrategy(strategyA);// 執行算法context.executeAlgorithm();delete strategyA;// 創建具體策略BStrategy* strategyB = new ConcreteStrategyB();// 設置具體策略Bcontext.setStrategy(strategyB);// 執行算法context.executeAlgorithm();delete strategyB;return 0;
    }
    
  3. 上述代碼中,客戶端可以根據需求選擇不同的具體策略來執行算法,通過改變策略對象,動態地改變行為。

  4. 4 優點:

    • 算法的實現與客戶端解耦,增加代碼的靈活性和可維護性。
    • 可以方便地擴展和添加新的策略類,符合開閉原則。
  5. 5 注意事項:

    • 在使用策略模式時,需要確定出多個具體策略類之間的差異性和相似性,以及它們共同實現的策略接口。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/41132.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/41132.shtml
英文地址,請注明出處:http://en.pswp.cn/news/41132.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

【JavaEE基礎學習打卡03】Java EE 平臺有哪些內容?

目錄 前言一、Java EE平臺說明二、Java EE平臺容器及組件1.平臺容器2.平臺組件 三、JavaEE平臺API服務1.API服務概覽2.平臺API 總結 前言 &#x1f4dc; 本系列教程適用于Java Web初學者、愛好者&#xff0c;小白白。我們的天賦并不高&#xff0c;可貴在努力&#xff0c;堅持不…

使用CLI添加磁盤到VM

登錄 https://portal.azure.com/#home&#xff0c;點擊右上角的控制臺圖標 &#xff0c;打開CLI 在控制臺中輸入如下指令&#xff0c;在NetworkWatcherRG創建一個名字為TEST的虛擬機&#xff0c;使用的鏡像是Win2019datacenter&#xff0c;username是aaa,password是1234567890A…

mysql的快速復習 和一些思考記錄

數據庫設計 第一范式&#xff1a;有主鍵&#xff0c;具有原子性&#xff0c;字段不可分割 數據庫表中不能出現重復記錄&#xff0c;每個字段是原子性的不能再分 關于第一范式&#xff0c;每一行必須唯一&#xff0c;也就是每個表必須有主鍵。 每一列不可再分&#xff01;&#…

Sui主網升級至V1.7.1版本

Sui主網現已升級至V1.7.1版本&#xff0c;此升級包含了多項修復和優化。升級要點如下所示&#xff1a; #12915 協議版本提升至20版本。 在Sui框架中新增Kiosk Extensions API和一個新的sui::kiosk_extension模塊。 您可以使用該API構建自定義的Kiosk應用程序&#xff0c;以…

okhttp源碼簡單流程分析

攔截器詳細解析可以看大佬簡書 "https://www.jianshu.com/p/6fac73f7570f"和 “https://www.jianshu.com/p/3c740829475c” okhttp請求流程 1&#xff1a;OkHttpClient okHttpClient new OkHttpClient.Builder() 構建一個okhttpClient對象&#xff0c;傳入你想傳入的…

vector使用以及模擬實現

vector使用以及模擬實現 vector介紹vector常用接口1.構造2.迭代器3.容量4.增刪查改5.練習 vector模擬實現1.迭代器失效2.反向迭代器3.完整代碼 vector介紹 和我們原來講的string不同&#xff0c;vector并不是類&#xff0c;是一個類模板&#xff0c;加<類型>實例化以后才…

主機防護的重要性和方式

01 主機防護的重要性 主機防護是網絡安全的重要組成部分。在互聯網時代&#xff0c;網絡攻擊成為了一種常見的威脅&#xff0c;而主機防護則是保護計算機系統免受網絡攻擊的重要手段。 主機防護可以防范各種網絡攻擊&#xff0c;如病毒、木馬、黑客攻擊等&#xff0c;從而保…

氣象監測站:用科技感知氣象變化

氣象監測站是利用科學技術感知當地小氣候變化情況的氣象觀測儀器&#xff0c;可用于農業、林業、養殖業、畜牧業、環境保護、工業等多個領域&#xff0c;提高對環境數據的利用率&#xff0c;促進產業效能不斷提升。 氣象監測站主要由氣象傳感器、數據傳輸系統、電源系統、支架…

Linux debian12解壓和壓縮.rar文件教程

一、Debian12安裝rar命令 sudo apt install rar二、使用rar軟件 1.解壓文件 命令格式&#xff1a; rar x 文件名.rar實力測試&#xff1a; [rootdoudou tmp]# rar x test.rar2.壓縮文件 test是一個文件夾 命令格式&#xff1a; rar a 文件名.rar 文件夾名實例測試&#x…

centos7 yum獲取軟件所有依賴包 創建本地yum源 yum離線安裝軟件

centos7 yum獲取軟件所有依賴包 創建本地yum源 離線安裝軟件 1、以安裝docker 20.10為例2、centos7 yum獲取docker 20.10 所有依賴包3、創建本地docker yum源4、yum使用本地docker源 離線安裝docker 1、以安裝docker 20.10為例 參考鏈接&#xff1a; 添加docker 清華軟件源 y…

git環境超詳細配置說明

一&#xff0c;簡介 在git工具安裝完成之后&#xff0c;需要設置一下常用的配置&#xff0c;如郵箱&#xff0c;縮寫&#xff0c;以及git commit模板等等。本文就來詳細介紹些各個配置如何操作&#xff0c;供參考。 二&#xff0c;配置步驟 2.1 查看當前git的配置 git conf…

使用 Apache Kafka 和 Go 將數據引入 OpenSearch

需要編寫自定義集成層來滿足數據管道中的特定要求&#xff1f;了解如何使用 Go 通過 Kafka 和 OpenSearch 實現此目的。 可擴展的數據攝取是OpenSearch等大規模分布式搜索和分析引擎的一個關鍵方面。構建實時數據攝取管道的方法之一是使用Apache Kafka。它是一個開源事件流平臺…

單詞倒排(C語言詳解)

題目&#xff1a;單詞倒排 描述&#xff1a;對字符串中的所有單詞進行倒排。 說明&#xff1a; 1、構成單詞的字符只有26個大寫或小寫英文字母&#xff1b; 2、非構成單詞的字符均視為單詞間隔符&#xff1b; 3、要求倒排后的單詞間隔符以一個空格表示&#xff1b;如果原字…

米爾瑞薩RZ/G2L開發板-02 ffmpeg的使用和RTMP直播

最近不知道是不是熬夜太多&#xff0c;然后記憶力減退了&#xff1f; 因為板子回來以后我就迫不及待的試了一下板子&#xff0c;然后發現板子有SSH&#xff0c;但是并沒有ffmpeg&#xff0c;最近總是在玩&#xff0c;然后今天說是把板子還原一下哇&#xff0c;然后把官方的固件…

前端單點登錄SSO面試回答

JWT鑒權機制 1.JWT用于登錄身份驗證 2.用戶登錄成功后&#xff0c;后端通過JWT機制生成一個token&#xff0c;返回給客戶端 3.客戶端后續的每次請求都需要攜帶token&#xff0c;放在header的authorization中 4.后端從authorization中拿到token后&#xff0c;通過secretKey進…

Spring Boot中使用validator如何實現接口入參自動檢驗

文章目錄 一、背景二、使用三、舉例 一、背景 在項目開發過程中&#xff0c;經常會對一些字段進行校驗&#xff0c;比如字段的非空校驗、字段的長度校驗等&#xff0c;如果在每個需要的地方寫一堆if else 會讓你的代碼變的冗余笨重且相對不好維護&#xff0c;如何更加規范和優…

微服務-GateWay(網關)

所謂網關是什么意思&#xff1f; 相當于就是你們小區家的保安&#xff0c;進出小區都得獲得保安的同意&#xff0c;守護你們小區的生命財產健康&#xff0c;網關也是如此&#xff0c;對每個請求都嚴格把關&#xff0c;將合法的或者是獲得權限的請求進入服務器 網關的功能&…

設計模式之解釋器模式詳解及實例

1、解釋器設計模式概述&#xff1a; 解釋器模式&#xff08;Interpreter Pattern&#xff09;是一種設計模式&#xff0c;它主要用于描述如何構建一個解釋器以解釋特定的語言或表達式。該模式定義了一個文法表示和解釋器的類結構&#xff0c;用于解釋符合該文法規則的語句。解…

擴散模型實戰(四):從零構建擴散模型

推薦閱讀列表&#xff1a; 擴散模型實戰&#xff08;一&#xff09;&#xff1a;基本原理介紹 擴散模型實戰&#xff08;二&#xff09;&#xff1a;擴散模型的發展 擴散模型實戰&#xff08;三&#xff09;&#xff1a;擴散模型的應用 本文以MNIST數據集為例&#xff0c;從…

智能樓宇綜合布線實訓室建設方案

一、樓宇智能綜合布線實訓室方案概述 樓宇智能綜合布線實訓室方案旨在為學生提供一個真實的學習和實踐環境&#xff0c;以培養他們在樓宇智能綜合布線領域的實際操作能力和技能。以下是一個概述&#xff1a; 1. 培養目標&#xff1a;培養學生在樓宇智能綜合布線方面的綜合能力…