設計模式(C 實現)(十六) 策略模式

2021-09-22 08:24:11 字數 1724 閱讀 3686

乙個問題,有三種解決方法,每種解決方法,適用於不同的場景,靈活設計切換每種解決方法來解決該問題,並可新增解決方法。

要能靈活的切換解決問題的方法,且能夠靈活新增方法。

strategy.h

在該檔案中,實現了策略的基類,及三個策略的子類

#pragma once

#include //策略基類

class istrategy

virtual ~istrategy()

virtual void algorithminte***ce() = 0;

};//策略a類

class cconcretestrategya : public istrategy

virtual ~cconcretestrategya()

void algorithminte***ce() };

//策略b類

class cconcretestrategyb : public istrategy

virtual ~cconcretestrategyb()

void algorithminte***ce() };

//策略c類

class cconcretestrategyc : public istrategy

virtual ~cconcretestrategyc()

void algorithminte***ce()

};

question.h

問題類

#pragma once

#include "strategy.h"

class cquestion

virtual ~cquestion()

void setstrategy(istrategy* pstrategy)

void solve()

private:

istrategy* m_pstrategy;

};

main.cpp

// main.cpp : 定義控制台應用程式的入口點。

//#include "question.h"

int main()

//用策略b解決該問題

istrategy* pstrategyb = new(std::nothrow) cconcretestrategyb();

if (nullptr != pstrategyb)

//用策略c解決該問題

istrategy* pstrategyc = new(std::nothrow) cconcretestrategyc();

if (nullptr != pstrategyc)

system("pause");

return 0;

}

執行結果

策略模式:它定義了演算法家族,分別封裝起來,讓他們之間可以互相替換,此模式讓演算法的變化,不會影響到使用演算法的客戶。

策略模式是一種定義一些列演算法的方法,從概念上來看,所有這些演算法完成的都是相同的工作,只是實現不同,他可以以相同的方式呼叫所有的演算法,減少了各種演算法類與使用演算法類之間的耦合。如果要新增解決問題的方法,只需新增新的策略子類。

在不同場景下需要切換不同的解決問題的方法。

返回目錄:設計模式(c++實現)(總)

設計模式 策略模式C 實現

strategy pattern 定義一組演算法,將每個演算法都封裝起來,並且使他們可以相互替換 也叫政策模式 class strategy protected strategy public virtual strategy 0 virtual void dosomething 0 class c...

設計模式C 實現二 策略模式

策略模式 strategy 定義演算法家族,分別封裝起來,讓這些演算法直接可以相互替換,我們可以自由新增或者修改演算法而不會影響客戶.優點 簡化了單元測試,因為每個演算法都有自己的類,可以通過自己的介面單獨測試。如果我們在客戶端為了判斷使用哪個演算法而使用switch語句來分析,我們可以使用策略模式...

設計模式C 實現(2) 策略模式

對外的介面一樣,只是各自實現上存在差異。用策略模式來封裝演算法,效果比較好。下面以快取記憶體 cache 的替換演算法為例,實現策略模式。抽象介面 class replacealgorithm 三種具體的替換演算法 class lru replacealgorithm public replacea...