定義:定義一組演算法,將每個演算法都封裝起來,並且使他們之間可以互換。
型別:行為類模式
類圖:
策略模式是對演算法的封裝,把一系列的演算法分別封裝到對應的類中,並且這些類實現相同的介面,相互之間可以替換。在行為類模式中,有一種模式也是關注對演算法的封裝——模版方法模式,對照類圖可以看到,策略模式與模版方法模式的區別僅僅是多了乙個單獨的封裝類context,它與模版方法模式的區別在於:在模版方法模式中,呼叫演算法的主體在抽象的父類中,而在策略模式中,呼叫演算法的主體則是封裝到了封裝類
context
中,抽象策略
strategy
一般是乙個介面,目的只是為了定義規範,裡面一般不包含邏輯。其實,這只是通用實現,而在實際程式設計中,因為各個具體策略實現類之間難免存在一些相同的邏輯,為了避免重複的**,我們常常使用抽象類來擔任
strategy
的角色,在裡面封裝公共的**,因此,在很多應用的場景中,在策略模式中一般會看到模版方法模式的影子。
策略模式的結構
策略模式**實現
inte***ce istrategy
class concretestrategy1 implements istrategy
}
class concretestrategy2 implements istrategy
}
class context
public void execute()
}
public class client
}
策略模式的優缺點策略模式的主要優點有:適用場景做物件導向設計的,對策略模式一定很熟悉,因為它實質上就是物件導向中的繼承和多型,在看完策略模式的通用**後,我想,即使之前從來沒有聽說過策略模式,在開發過程中也一定使用過它吧?至少在在以下兩種情況下,大家可以考慮使用策略模式,
幾個類的主要邏輯相同,只在部分邏輯的演算法和行為上稍有區別的情況。
有幾種相似的行為,或者說演算法,客戶端需要動態地決定使用哪一種,那麼可以使用策略模式,將這些演算法封裝起來供客戶端呼叫。
策略模式是一種簡單常用的模式,我們在進行開發的時候,會經常有意無意地使用它,一般來說,策略模式不會單獨使用,跟模版方法模式、工廠模式等混合使用的情況比較多。
設計模式利劍12 策略模式
定 義 定義一組演算法,將每個演算法都封裝起來,並且使他們之間可以互換 優 點 1 演算法可以自由切換 2 避免使用多重條件判斷 3 擴充套件性好 缺 點 1 策略類數量多 2 所有的策略類都需要對外暴露 使用場景 1 多個類只有在演算法或行為上稍有不同的場景 2 演算法需要自由切換的場景 3 需要...
設計模式1 2 策略模式 has setter
策略模式 定義乙個演算法族 繼承 實現的同乙個抽象類 介面 同一族的演算法 具體的類 可以相互替換,演算法的改變不影響客戶的使用。有setter的策略模式,可以在例項化後動態指定演算法。主要元素 客戶類 tom 構造方法 定義weapon的具體物件 屬性weapon 持有實現weapon介面的乙個物...
模式 策略模式
前言 所有的設計模式都是基於程式設計屆前輩們的不斷實踐得出的解決一類問題中比較有效高效的程式設計方法。策略模式 策略模式用於解決業務中不同場景下統一行為的細微差別問題。策略模式遵循 開閉原則 舉個例子來說,在購物車功能中,結算 的時候會根據使用者的不同級別去打折,那麼打折計算 的這一行為就會有不同演...