設計模式之策略模式(四)

2021-09-01 10:21:21 字數 1052 閱讀 6928

策略模式定義

在軟體開發中也常常遇到類似的情況,實現某乙個功能有多種演算法或者策略,我們可以根據環境或者條件的不同選擇不同的演算法或者策略來完成該功能。

策略模式:定義一系列的演算法,把每乙個演算法封裝起來, 並且使它們可相互替換

策略模式的組成

1、抽象策略角色(strategy): 策略類,通常由乙個介面或者抽象類實現。

2、具體策略角色(concretestrategya):包裝了相關的演算法和行為。

3、環境角色(context):持有乙個策略類的引用,最終給客戶端呼叫。

策略模式類圖

策略模式優缺點

優點:1、 簡化了單元測試,因為每個演算法都有自己的類,可以通過自己的介面單獨測試。

2、 避免程式中使用多重條件轉移語句,使系統更靈活,並易於擴充套件。

3、 遵守大部分grasp原則和常用設計原則,高內聚、低偶合。

缺點:1、 因為每個具體策略類都會產生乙個新類,所以會增加系統需要維護的類的數量。

2、 在基本的策略模式中,選擇所用具體實現的職責由客戶端物件承擔,並轉給策略模式的context物件。(這本身沒有解除客戶端需要選擇判斷的壓力,而策略模式與簡單工廠模式結合後,選擇具體實現的職責也可以由context來承擔,這就最大化的減輕了客戶端的壓力。)

策略模式的適用性

當存在以下情況時使用strategy模式

1)許多相關的類僅僅是行為有異。 「策略」提供了一種用多個行為中的乙個行為來配置乙個類的方法。即乙個系統需要動態地在幾種演算法中選擇一種。

2) 需要使用乙個演算法的不同變體。例如,你可能會定義一些反映不同的空間 /時間權衡的演算法。當這些變體實現為乙個演算法的類層次時 ,可以使用策略模式。

3)演算法使用客戶不應該知道的資料。可使用策略模式以避免暴露複雜的、與演算法相關的資料結構。

4)乙個類定義了多種行為 , 並且這些行為在這個類的操作中以多個條件語句的形式出現。將相關的條件分支移入它們各自的strategy類中以代替這些條件語句。

設計模式四 策略模式

策略模式 所謂策略其實就是做一件事情有很多很多的方法,比如說乙個商場要搞 的方式有可能有很多 打折啊,滿100返50啊 積分等等之類的。這種不同的 方式在我們系統中表示就是乙個乙個的策略,並且策略是可以隨時更換的,這個時候在設計系統時就可以使用策略模式。商場有可能會更換或追加新的 模式,也就是策略存...

設計模式四 策略模式

策略模式 所謂策略其實就是做一件事情有很多很多的方法,比如說乙個商場要搞 的方式有可能有很多 打折啊,滿100返50啊 積分等等之類的。這種不同的 方式在我們系統中表示就是乙個乙個的策略,並且策略是可以隨時更換的,這個時候在設計系統時就可以使用策略模式。商場有可能會更換或追加新的 模式,也就是策略存...

設計模式之策略模式

include using namespace std 飛行行為介面類 class flystrategy 高空飛行行為具現類 class heightfly public flystrategy virtual void fly private heightfly 低空飛行行為具現類 class ...