對外的介面一樣,只是各自實現上存在差異。用策略模式來封裝演算法,效果比較好。下面以快取記憶體(cache)的替換演算法為例,實現策略模式。
//抽象介面
class replacealgorithm
;//三種具體的替換演算法
class lru_replacealgorithm : public replacealgorithm
~cache()
void replace()
};
如果用這種方式,客戶就需要知道這些演算法的具體定義。只能以下面這種方式使用,可以看到暴露了太多的細節。
方式二:也是直接通過引數指定,只不過不是傳入指標,而是乙個標籤。這樣客戶只要知道演算法的相應標籤即可,而不需要知道演算法的具體定義。
//cache需要用到替換演算法
enum ra ; //標籤
class cache
~cache()
void replace()
};
相比方式一,這種方式用起來方便多了。其實這種方式將簡單工廠模式與策略模式結合在一起,演算法的定義使用了策略模式,而cache的定義其實使用了簡單工廠模式。
上面兩種方式,建構函式都需要形參。建構函式是否可以不用引數呢?下面給出第三種實現方式。
方式三:利用模板實現。演算法通過模板的實參指定。當然了,還是使用了引數,只不過不是建構函式的引數。在策略模式中,引數的傳遞難以避免,客戶必須指定某種演算法。
//cache需要用到替換演算法
template class cache
~cache()
void replace()
};
使用方式如下:
int main()
出處 設計模式 策略模式C 實現
strategy pattern 定義一組演算法,將每個演算法都封裝起來,並且使他們可以相互替換 也叫政策模式 class strategy protected strategy public virtual strategy 0 virtual void dosomething 0 class c...
C 與設計模式(2) 策略模式
策略模式是指提供介面,讓使用者使用可替換的演算法。enum alg 標籤 抽象介面 class algorithm 三種具體的替換演算法 class algorithm1 public algorithm class algorithm2 public algorithm class algorit...
設計模式 策略模式 2
設計模式,先說設計模式吧,對於設計模式而言,這裡邊把事物具體抽象出來,就剩下什麼了?就剩下 如何用乙個良好的結構儲存資料?然後如何用乙個擴充套件性強,可維護性高的操作,來實現這些資料的操作與控制 好了,感言說完了,接下來就是,聊一聊設計模式中的 策略模式!對於策略模式而言,有乙個比較好的例子,那就是...