C++設(shè)計(jì)模式之策略模式(Strategy)
策略模式將不同算法的邏輯抽象接口封裝到一個(gè)類(lèi)中,通過(guò)組合和多態(tài)結(jié)合的方式來(lái)進(jìn)行不同算法具體的實(shí)現(xiàn)。
作用
策略模式是一種定義一系列算法的方法,Strategy類(lèi)層次為Context定義了一系列的可重用的算法或行為, 所有的算法以相同的方式進(jìn)行調(diào)用,減少了算法類(lèi)之間的耦合
類(lèi)視圖

實(shí)現(xiàn)
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模式的根本區(qū)別是Strategy通過(guò)組合方式實(shí)現(xiàn)算法(實(shí)現(xiàn))的異構(gòu), 而Template模式則采取的是繼承的方式,這兩個(gè)模式的區(qū)別也是繼承和組合兩種實(shí)現(xiàn)接口重用的方式的區(qū)別。
Strategy模式和Bridge模式的區(qū)別是一個(gè)是行為模式,一個(gè)是對(duì)象的結(jié)構(gòu)模式,Strategy更偏向與不同算法的接口封裝實(shí)現(xiàn),其重點(diǎn)是在算法行為的實(shí)現(xiàn),一般為算法的擴(kuò)展;而B(niǎo)ridge更注重的是對(duì)象和實(shí)現(xiàn)的分離,對(duì)象和實(shí)現(xiàn)分別可進(jìn)行擴(kuò)展,兩者互不影響。相對(duì)Strategy模式,Bridge模式要表達(dá)的內(nèi)容要更多,結(jié)構(gòu)也更加復(fù)雜,而Strategy模式更像是Bridge模式的一部分實(shí)現(xiàn)方式。
應(yīng)用場(chǎng)景
當(dāng)有不同的算法和行為可供選擇,每種算法和行為可對(duì)應(yīng)一個(gè)類(lèi),且功能各不相同。
以上就是本文的全部?jī)?nèi)容,希望對(duì)大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。
相關(guān)文章
關(guān)于UDP服務(wù)器客戶(hù)端編程流程介紹
大家好,本篇文章主要講的是關(guān)于UDP服務(wù)器客戶(hù)端編程流程介紹,感興趣的同學(xué)趕快來(lái)看看吧,對(duì)你有幫助的話(huà)記得收藏2021-12-12
QT?UDP網(wǎng)絡(luò)編程實(shí)現(xiàn)簡(jiǎn)單消息傳輸
這篇文章主要為大家詳細(xì)介紹了QT?UDP網(wǎng)絡(luò)編程實(shí)現(xiàn)簡(jiǎn)單消息傳輸,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2022-08-08
C++使用文件實(shí)現(xiàn)學(xué)生信息管理系統(tǒng)
這篇文章主要為大家詳細(xì)介紹了C++使用文件實(shí)現(xiàn)學(xué)生信息管理系統(tǒng),文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2021-01-01
利用C語(yǔ)言結(jié)構(gòu)體實(shí)現(xiàn)通訊錄
這篇文章主要為大家詳細(xì)介紹了利用C語(yǔ)言結(jié)構(gòu)體實(shí)現(xiàn)通訊錄,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2019-01-01

