日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > c/c++ >内容正文

c/c++

23种设计模式C++源码与UML实现--策略模式

發布時間:2025/3/15 c/c++ 20 豆豆
生活随笔 收集整理的這篇文章主要介紹了 23种设计模式C++源码与UML实现--策略模式 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

策略模式

Strategy模式也叫策略模式,是行為模式之一,它對一系列的算法加以封裝,為所有算法定義一個抽象算法接口,并通過繼承該抽象算法接口對所有的算法加以封裝和實現,具體的算法選擇交給客戶端決定。strategy模式主要用來平滑地處理算法切換。

策略模式實現的關鍵就是將算法的邏輯抽象接口封裝到一個類中,在通過委托的方式將具體的算法實現委托給具體的Strategy類來實現

Strategy

策略(算法)抽象

ConcreteStrategy

各種策略(算法)的具體實現

Context

策略的外部封裝類,或者說策略的容器類。根據不同策略執行不同的行為。策略由外部環境決定。

適用于:準備一組算法,并將每一個算法都封裝起來,使得它們可以互換。

策略模式優缺點

它的優點有:

  • 策略模式提供了管理相關的算法族的辦法。策略類的等級結構定義了一個算法或行為族。
    恰當使用繼承可以把公共的代碼移到父類里面,從而避免重復的代碼。
  • 策略模式提供了可以替換繼承關系的辦法。繼承可以處理多種算法或行為。如果不是用
    策略模式,那么使用算法或行為的環境類就可能會有一些子類,每一個子類提供一個不同
    的算法或行為。但是,這樣一來算法或行為的使用者就和算法或行為本身混在一起。決定
    使用哪一種算法或采取哪一種行為的邏輯就和算法或行為的邏輯混合在一起,從而不可能
    再獨立演化。繼承使得動態改變算法或行為變得不可能。
  • 使用策略模式可以避免使用多重條件轉移語句。多重轉移語句不易維護,它把采取哪一
    種算法或采取哪一種行為的邏輯與算法或行為的邏輯混合在一起,統統列在一個多重轉移
    語句里面,比使用繼承的辦法還要原始和落后。
  • 策略模式的缺點有:

  • 客戶端必須知道所有的策略類,并自行決定使用哪一個策略類。這就意味著客戶端必須
    理解這些算法的區別,以便適時選擇恰當的算法類。換言之,策略模式只適用于客戶端知
    道所有的算法或行為的情況。

  • 策略模式造成很多的策略類。有時候可以通過把依賴于環境的狀態保存到客戶端里面,
    而將策略類設計成可共享的,這樣策略類實例可以被不同客戶端使用。換言之,可以使用
    享元模式來減少對象的數量

  • // // Created by andrew on 2020/11/26. // #include <iostream>using namespace std;class Strategy {public:virtual void crypt() = 0;virtual ~Strategy() = default; };class AES : public Strategy { public:void crypt() override {cout << "AES strategy" << endl;} };class DES : public Strategy { public:void crypt() override {cout << "DES strategy" << endl;} };class Context { public:void setStrategy(Strategy *pStrategy) {this->strategy = pStrategy;}void myOperator() {strategy->crypt();}private:Strategy *strategy; };//算法實現和客戶端使用完全解耦合 int main(int argc, char *argv[]) {Strategy *strategy = nullptr;strategy = new AES;Context *context = new Context;context->setStrategy(strategy);context->myOperator();delete strategy;delete context;return 0; }

    總結

    以上是生活随笔為你收集整理的23种设计模式C++源码与UML实现--策略模式的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。