策略模式將不同算法的邏輯抽象接口封裝到一個類中,通過組合和多態結合的方式來進行不同算法具體的實現。
作用
策略模式是一種定義一系列算法的方法,Strategy類層次為Context定義了一系列的可重用的算法或行為, 所有的算法以相同的方式進行調用,減少了算法類之間的耦合
類視圖
實現
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模式的一部分實現方式。
應用場景
當有不同的算法和行為可供選擇,每種算法和行為可對應一個類,且功能各不相同。
以上就是本文的全部內容,希望對大家的學習有所幫助,也希望大家多多支持億速云。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。