C++設(shè)計(jì)模式之策略模式(Strategy)
策略模式將不同算法的邏輯抽象接口封裝到一個(gè)類中,通過組合和多態(tài)結(jié)合的方式來進(jìn)行不同算法具體的實(shí)現(xiàn)。
作用
策略模式是一種定義一系列算法的方法,Strategy類層次為Context定義了一系列的可重用的算法或行為, 所有的算法以相同的方式進(jìn)行調(diào)用,減少了算法類之間的耦合
類視圖
實(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通過組合方式實(shí)現(xiàn)算法(實(shí)現(xiàn))的異構(gòu), 而Template模式則采取的是繼承的方式,這兩個(gè)模式的區(qū)別也是繼承和組合兩種實(shí)現(xiàn)接口重用的方式的區(qū)別。
Strategy模式和Bridge模式的區(qū)別是一個(gè)是行為模式,一個(gè)是對象的結(jié)構(gòu)模式,Strategy更偏向與不同算法的接口封裝實(shí)現(xiàn),其重點(diǎn)是在算法行為的實(shí)現(xiàn),一般為算法的擴(kuò)展;而Bridge更注重的是對象和實(shí)現(xiàn)的分離,對象和實(shí)現(xiàn)分別可進(jìn)行擴(kuò)展,兩者互不影響。相對Strategy模式,Bridge模式要表達(dá)的內(nèi)容要更多,結(jié)構(gòu)也更加復(fù)雜,而Strategy模式更像是Bridge模式的一部分實(shí)現(xiàn)方式。
應(yīng)用場景
當(dāng)有不同的算法和行為可供選擇,每種算法和行為可對應(yīng)一個(gè)類,且功能各不相同。
以上就是本文的全部內(nèi)容,希望對大家的學(xué)習(xí)有所幫助,也希望大家多多支持腳本之家。

QT?UDP網(wǎng)絡(luò)編程實(shí)現(xiàn)簡單消息傳輸

C++使用文件實(shí)現(xiàn)學(xué)生信息管理系統(tǒng)

利用C語言結(jié)構(gòu)體實(shí)現(xiàn)通訊錄