1、Strategy模式簡介
《設計模式》一書中對Stragety模式的意圖是這樣敘述的:
定義一系列的算法,把它們一個個封裝起來,並且使它們可相互替換。Strategy模式使算法可獨立於使用它的客戶而變化。
Strategy模式以下面幾條原則爲基礎:
1) 對象都具有職責;
2) 這些職責不同的具體實現是通過多態的使用完成的;
3) 概念上相同的算法具有多個不同的實現,需要進行管理。
2、Strategy模式關鍵特徵
意圖 |
可以根據所處上下文,使用不同的業務規則或算法 |
問題 |
對所需算法的選擇取決於發出請求的客戶或者要處理的數據。如果只有一些不會變化的算法,就不需要Strategy模式。 |
解決方案 |
將對算法的選擇和算法的實現相分離。允許根據上下文進行選擇。 |
參與者與協作者 |
1、 Strategy指定了如何使用不同的算法。 2、 各ConcreteStrategy實現了這些不同的算法。 3、 Context通過類型爲Strategy的引用使用具體的ConcreteStrategy。Strategy與Context相互作用以實現所選的算法(有時候Strategy必須查詢Context)。Context將來自Client的請求轉發給Strategy。 |
效果 |
1、 Strategy模式定義了一系列的算法。 2、 可以不使用switch語句或條件語句 3、 必須以相同的方式調用所有的算法(它們必須擁有相同的接口)。個ConcreteStrategy與Context之間的相互作用可能需要在Context中加入獲取狀態的方法。 |
實現 |
讓使用算法的類(Context)包含一個抽象類(Strategy),該抽象類擁有一個抽象方法指定如何調用算法。每個派生類按需要實現算法。 (在原型Strategy模式中,選擇所用具體實現的職責有Client對象承擔,並轉給Strategy模式的Context對象) |