溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

C++設計模式之策略模式(Strategy)

發布時間:2020-09-12 10:55:03 來源:腳本之家 閱讀:219 作者:chencarl 欄目:編程語言

策略模式將不同算法的邏輯抽象接口封裝到一個類中,通過組合和多態結合的方式來進行不同算法具體的實現。

作用

策略模式是一種定義一系列算法的方法,Strategy類層次為Context定義了一系列的可重用的算法或行為, 所有的算法以相同的方式進行調用,減少了算法類之間的耦合

類視圖

C++設計模式之策略模式(Strategy)

實現

class Strategy
{
public:
  ~Strategy();
  virtual void AlgrithmInterface()=0;
protected:
  Strategy();
};

class ConcreteStrategyA : public Strategy
{
public:
  ConcreteStrategyA();
  ~ConcreteStrategyA();
  virtual void AlgrithmInterface();
};

class ConcreteStrategyB : public Strategy
{
public:
  ConcreteStrategyB();
  ~ConcreteStrategyB();
  virtual void AlgrithmInterface();
};

class Context
{
public:
  Context(Strategy*);
  ~Context();
  void DoAction();
private:
  Strategy* _strategy;
};

int main()
{
  //策略A與B可替換
  Strategy* pStra = new ConcreteStrategyA();
  Context* pCon = new Context(pStra);
  pCon->DoAction();

  pStra = new ConcreteStrategyB();
  pCon = new Context(pStra);
  pCon->DoAction();

  return 0;
}

Strategy模式和Template模式的根本區別是Strategy通過組合方式實現算法(實現)的異構, 而Template模式則采取的是繼承的方式,這兩個模式的區別也是繼承和組合兩種實現接口重用的方式的區別。

Strategy模式和Bridge模式的區別是一個是行為模式,一個是對象的結構模式,Strategy更偏向與不同算法的接口封裝實現,其重點是在算法行為的實現,一般為算法的擴展;而Bridge更注重的是對象和實現的分離,對象和實現分別可進行擴展,兩者互不影響。相對Strategy模式,Bridge模式要表達的內容要更多,結構也更加復雜,而Strategy模式更像是Bridge模式的一部分實現方式。

應用場景

當有不同的算法和行為可供選擇,每種算法和行為可對應一個類,且功能各不相同。

以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持億速云。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

亚洲午夜精品一区二区_中文无码日韩欧免_久久香蕉精品视频_欧美主播一区二区三区美女