一、概念
策略模式(strategy):它定義了一系列的演算法,並將每乙個演算法封裝起來,而且使它們還可以相互替換。策略模式讓演算法的變化不會影響到使用演算法的客戶。
類圖如圖:
優點:1、 簡化了單元測試,因為每個演算法都有自己的類,可以通過自己的介面單獨測試。
2、 避免程式中使用多重條件轉移語句,使系統更靈活,並易於擴充套件。
3、 遵守大部分grasp原則和常用設計原則,高內聚、低偶合。
缺點:1、 因為每個具體策略類都會產生乙個新類,所以會增加系統需要維護的類的數量。
2、 在基本的策略模式中,選擇所用具體實現的職責由客戶端物件承擔,並轉給策略模式的istrategy物件。(這本身沒有解除客戶端需要選擇判斷的壓力,而策略模式與簡單工廠模式結合後,選擇具體實現的職責也可以由istrategy來承擔,這就最大化的減輕了客戶端的壓力。)
二、策略模式的**實現
以飛機為例
首先定義乙個飛共有的功能方法類
airplane.cs
2.定義一架攻擊機類,它將繼承飛機共有的功能方法:
f12.cs
3. 定義一架空中加油機,它也將繼承飛機共有的功能方法:
airplaneaddoil.cs
大家都知道戰鬥機是具備攻擊能力的,但空中加油機是沒有這個功能的。
於是得用策略模式定義乙個介面
istrategy.cs
增加乙個攻擊類的子類去實現攻擊功能。
attack.cs
客戶端實現:
如果再增加新的攻擊機,只須增加新型攻擊機類.
f22.cs
這時的只須在客戶端**增加f22的呼叫就行了
總結:這個只是簡單的說明策略模式的使用,想想看,如果在增加新型飛彈攻擊功能該如果在策略模式裡實現。
那就只須增加乙個新型飛彈攻擊類去實現攻擊介面就行了。在客戶端就只須直接呼叫這個功能就行。
大話設計模式筆記(二) 策略模式
商場收銀軟體,營業員根據客戶所購買的商品單價和數量,向客戶收費。普通實現 created by callmedevil on 2019 6 1.public class normaltest 計算總價 param price 單價 param num 數量 return private static...
大話設計模式 策略模式
前言 做事情的時候我們需要動動腦來簡化自己完成任務的負擔,這就需要講究策略了,我們會根據自己所處的環境列出所有的可能條件,再從中挑選合適的方法來完成這件事。就像我們過年回家,我們可以選擇高鐵 普通火車 還可以選擇硬座 軟座 臥鋪,這都是我們回家的策略 買不到直達的還得轉戰好幾個火車站,策略的最終到達...
大話設計模式 策略模式
前言 做事情的時候我們需要動動腦來簡化自己完成任務的負擔,這就需要講究策略了,我們會根據自己所處的環境列出所有的可能條件,再從中挑選合適的方法來完成這件事。就像我們過年回家,我們可以選擇高鐵 普通火車 還可以選擇硬座 軟座 臥鋪,這都是我們回家的策略 買不到直達的還得轉戰好幾個火車站,策略的最終到達...