何時使用:
1.封裝變化點是物件導向的乙個重要思路,就和第一節提到的一樣。
2.策略模式:是一種定義一系列演算法的模式,這些方法完成的都是相同工作,只是實現不同,該模式可以以相同的介面呼叫來呼叫所有的演算法和實現,以減少各個演算法中的耦合度。
優點:1.多個類只在演算法實現上不同,可以使用策略模式,在執行時動態選擇具體要執行的行為。
2.演算法之前互不影響。
3.使用者不考慮演算法實現細節。
如:class operate
public:
virtual void calculate() = 0;
class damagehp :
public operate
public:
int m_nhp;
void calaulate();
class damagemp :
public operate
public:
int m_nmp;
void calaulate();
class context
public:
context( operate _oper )
// 這裡就實現的外部只考慮這個介面就可以了,
// 這個實現把各種演算法都封裝在了裡面,最後暴露給使用者的只用context和實際演算法了。使用者不用考慮演算法的具體實現。
void contextinte***ce() ;
private:
operate oper;
但是如果使用上面的方法還是未避免客戶端判斷邏輯的問題,我們這裡考慮使用簡單工廠模式,就報邏輯演算法選擇也封裝在裡面了
class context
public:
operate oper;
context( inttype )
switch( type )
case 1:
oper = new damagemp ();
break;
case 2:
oper = new damagehp ();
break;
oper = _oper;
// 這裡就實現的外部只考慮這個介面就可以了,
// 這個實現把各種演算法都封裝在了裡面,最後暴露給使用者的只用context和實際演算法了。使用者不用考慮演算法的具體實現。
void contextinte***ce() ;
private:
operate oper;
3 策略模式
在策略模式 strategy pattern 中,乙個類的行為或其演算法可以在執行時更改。這種型別的設計模式屬於行為型模式。在策略模式中,我們建立表示各種策略的物件和乙個行為隨著策略物件改變而改變的 context 物件。策略物件改變context 物件的執行演算法。定義一系列的演算法,把它們乙個個...
設計模式3策略模式
一種定義一系列演算法的方法,從概念上來看所有這些演算法完成的都是相同的工作,只是實現不同,它們可以以相同的方式呼叫相同的演算法,減少了各種演算法類和使用演算法類之間的耦合 策略模式的 策略類 為 所有context 定義了一系列的可供重用的演算法和行為.繼承有助於析取出這些演算法中的公共行為 策略模...
C 設計模式3 (策略模式)
策略模式是將演算法的不同實現封裝到乙個類裡面,將演算法的實現和演算法的使用分離。在演算法發生變化時不會影響演算法的呼叫者。在需要不同演算法時,可以相互替換,而不影響使用者。下面是uml圖 以下是策略基類和子類 ifndef basestrategyinte ce h define basestrat...