重學設計模式 - Strategy模式

1、Strategy模式簡介

《設計模式》一書中對Stragety模式的意圖是這樣敘述的:

定義一系列的算法,把它們一個個封裝起來,並且使它們可相互替換。Strategy模式使算法可獨立於使用它的客戶而變化。 

Strategy模式以下面幾條原則爲基礎:

1)  對象都具有職責;

2)  這些職責不同的具體實現是通過多態的使用完成的;

3)  概念上相同的算法具有多個不同的實現,需要進行管理。

2、Strategy模式關鍵特徵

 

意圖

可以根據所處上下文,使用不同的業務規則或算法

問題

對所需算法的選擇取決於發出請求的客戶或者要處理的數據。如果只有一些不會變化的算法,就不需要Strategy模式。

解決方案

將對算法的選擇和算法的實現相分離。允許根據上下文進行選擇。

參與者與協作者

1、  Strategy指定了如何使用不同的算法。

2、  ConcreteStrategy實現了這些不同的算法。

3、  Context通過類型爲Strategy的引用使用具體的ConcreteStrategyStrategyContext相互作用以實現所選的算法(有時候Strategy必須查詢Context)。Context將來自Client的請求轉發給Strategy

效果

1、  Strategy模式定義了一系列的算法。

2、  可以不使用switch語句或條件語句

3、  必須以相同的方式調用所有的算法(它們必須擁有相同的接口)。個ConcreteStrategyContext之間的相互作用可能需要在Context中加入獲取狀態的方法。

實現

讓使用算法的類(Context)包含一個抽象類(Strategy),該抽象類擁有一個抽象方法指定如何調用算法。每個派生類按需要實現算法。

(在原型Strategy模式中,選擇所用具體實現的職責有Client對象承擔,並轉給Strategy模式的Context對象)

 

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章