策略模式使用的例子
strategy—|
|—oop—nonuse物件導向角度不使用策略模式的例子
|—pop—|
|—nonuse面向過程角度不使用策略模式的例子
|—use使用策略模式的例子
定義一系列演算法類,將每乙個演算法封裝起來,並讓它們可以相互替換。策略模式讓演算法獨立於使用它的客戶而變化。 context(環境類):負責使用演算法策略,其中維持了乙個抽象策略類的引用例項。strategy(策略類的介面):所有策略類的父類(介面),為所支援的策略演算法宣告了抽象方法。
concretestrategy(具體策略類):實現了在抽象策略類中宣告的方法。
提供了對開閉原則的完美支援,使用者可以在不修改原有系統的基礎上選擇具體演算法或行為,也可以靈活地增加新的演算法或行為。避免了多重的if-else條件選擇語句,利於系統的維護。
提供了一種演算法的復用機制,不同的環境類可以方便地復用這些策略類。
客戶端需要知道所有的策略類,並自行決定使用哪乙個策略(使用者必須知道每乙個策略類其中的演算法)將造成系統產生很多的具體策略類,任何細小的變化都將導致系統要增加乙個具體策略類(策略越多,類越多)
無法在客戶端同時使用多個策略類(一次只能使用一種策略)
如果乙個系統要動態地在幾種演算法之間選擇其中一種如果有難以維護的多重if-else條件選擇語句是為了實現物件的行為
不希望客戶知道複雜的與演算法有關的資料結構,可以將其封裝到策略中
1.從面向過程的角度來說很多時候,我們需要判斷各種條件後然後執行不同的業務邏輯
而且執行的業務邏輯非常的複雜,我們可以看作乙個個複雜的演算法(策略)
我們可以將其進行拆分為乙個個策略類來實現,從而方便維護,方便復用
2.從物件導向的角度來說
如果使用繼承
如果父類不是抽象方法,那麼容易導致忘記或者遺漏重寫方法,
如果使用抽象方法,那麼每個類都必須去重寫父類的方法,無論你需不需要(有的時候你是不需要的)
而且有可能大多數的**相同時,改動就變得很複雜了
如果使用多個介面實現
那麼如果使用策略a就需要修改為介面a,如果使用策略b就需要修改為介面b
比較麻煩,而且介面多,**復用性就變差了
策略模式使用組合(在類中增加乙個私有域,引用另乙個已有類的例項,通過呼叫引用例項的方法從而獲得新的功能)
足夠的靈活,更加易於維護,策略可以復用
參考部落格:
1 設計模式之策略模式
設計模式的一句話 過分設計是一種罪過,要根據專案實事求是,沒有任何一種設計是一步到位,很多功能都是根據反饋進行改善。1 背景 在實際開發中,我們常常遇見實現某種業務功能時,有許多不同實現方式,使用者可以任意選擇其中的一種方式。例如,在排序某個序列資料時,我們可以選擇氣泡排序 快速排序 插入排序 堆排...
設計模式 二 策略模式 1
策略模式 strategy 它定義了演算法家族,分別封裝起來,讓他們之間可以互相替換,此模式讓演算法的變化,不會影響到使用演算法的客戶。結構圖 strategy抽象類,定義所有支援的演算法的公共介面。class strategy 演算法方法 virtual void algorithminte ce...
設計模式 一 策略模式 1
策略模式用到就是 多型 的思想,父類有多個子類,為同乙個行為實現不同的表現形式 舉例 1個中國人,1個印度人,他們都吃飯,但是中國人是用筷子,印度人是用手,這個就是多型,同一行為的2種實現方式 吃飯行為 public inte ce eating中國人和印度人 public class chines...