策略模式將不同演算法的邏輯抽象介面封裝到一個類中,通過組合和多態結合的方式來進行不同演算法具體的實現。 作用 策略模式是一種定義一系列演算法的方法,Strategy類層次為Context定義了一系列的可重用的演算法或行為, 所有的演算法以相同的方式進行調用,減少了演算法類之間的耦合 類視圖 實現 Strateg ...
策略模式將不同演算法的邏輯抽象介面封裝到一個類中,通過組合和多態結合的方式來進行不同演算法具體的實現。
作用
策略模式是一種定義一系列演算法的方法,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模式的一部分實現方式。
應用場景
當有不同的演算法和行為可供選擇,每種演算法和行為可對應一個類,且功能各不相同。