策略模式是一種定義了一系列演算法的方法,所有這些演算法完成的都是相同的工作,只是實現不同,它可以以相同的方式呼叫所有的演算法,減少了各種演算法類與使用演算法的類之間的耦合.簡單來說,策略模式就是將每個演算法都封裝起來,使他們之間可以互換.
舉個例子,比如商場的不同優惠活動,有滿100返20、滿300返100、全場8折、積分等,不管商場如何搞活動,歸根結底都是一系列的演算法,這些演算法是隨時都可能互相替換的.
該模式中包含的角色以及職責:
1)抽象策略角色
是對策略、演算法的抽象,通常為介面,定義每個策略、方法必須具有的屬性和方法.
2)具體策略角色
實現抽象策略角色,用於具體演算法的實現.
3)環境角色
又稱context上下文,持有乙個策略類的引用,最終給客戶端呼叫.有承上啟下的作用,遮蔽對策略、演算法的直接訪問,封裝可能存在的變化.
uml圖如下:
1)抽象策略角色
2)具體策略角色public inte***ce strategy
@slf4j
@component("concretestrategya")
public class concretestrategya implements strategy
}
...以此類推@slf4j
@component("concretestrategyb")
public class concretestrategyb implements strategy
}
3)上下文
4)測試類@service
public class context
/*** 根據傳入的型別獲取資源
* @author su
* @date 2019-12-09 11:30
* @param strategytype
* @return void
*/public string getresult(string strategytype)
}
5)測試結果@slf4j
@restcontroller
public class testcontroller
}
優點:1)消除條件語句,避免大量的判斷.解決在多種演算法相似的情況下,使用if...else所帶來的複雜和難以維護
2)演算法可以自由切換,擴充套件性好.(新的演算法只需要實現抽象策略)
缺點:1)所有策略類都需對外暴露,以便演算法的選擇.
2)策略類多於四個的時候就要考慮使用混合模式解決策略類膨脹的問題了
設計模式 策略設計模式
策略設計模式其實就是多型的使用,父類引用指向子類物件。策略模式的最大特點是使得演算法可以在不影響客戶端的情況下發生變化,從而改變不同的功能。策略模式的缺點其實也很明顯,在於策略模式把每一種具體的策略都封裝成乙個實現類,如果策略有很多的話,很顯然是實現類就會導致過多,顯得臃腫。案列 author de...
設計模式 策略模式
策略模式是一種定義一系列演算法的方法,從概念上來看,所有這些方法完成的都是相同的工作,只是實現不同,他們可以用相同的方式呼叫所有的演算法,減少了演算法類和使用演算法類之間的耦合.優點 策略模式的strategy類層次為context定義了一系列可供重用的演算法和行為,繼承有助於吸取這些演算法中的公共...
設計模式 策略模式
定義了演算法家族,分別封裝起來,讓他們之間可以相互替代,此模式讓演算法的變化,不會影響到使用演算法的客戶端 定義抽象類 分別實現抽象類,不同的物件 然後用乙個類初始化,並傳入具體的策略物件 根據具體的策略物件,呼叫其演算法的方法 客戶端 是由於例項化不同的策略,所以最終在呼叫 類時,所獲得的結果時不...