Java設計模式(01):策略模式
特別聲明:
*本文爲學習筆記。
*本文只是備忘錄,並非詳細講解。
策略模式:封裝算法(變化、行爲),讓他們可以相互替換,算法的變化獨立於使用者(客戶)。
將行爲封裝起來,利用組合和多態來實現行爲的複用。
設計原則:
1、多用組合少用繼承。
2、面向接口而不是實現編程
面向接口編程可以理解爲面向超類型編程。這裏的接口不僅是指java中的interface,而是一種概念,關鍵在於利用多態。
3、找出變化的部分,獨立出來,和不變化的部分區分開。
優點:遵循面向對象設計原則,降低設計耦合、便於擴展。
缺點:當實現算法較多時,會增加需要維護的類的數量。可以使用工廠方法來解決。
---------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
JAVA中很多地方都使用策略模式。
如排序Collections.sort() 調用不同Array.sort(). 使用的就是策略模式。線程池、正則等都有用到。
現實的項目中如何使用?
#目前電商系統中 自動獲取快遞單號。不同的快遞公司對應一種獲取單號的算法。
一般結構如下:
僞代碼如下:
if(SF){
service= new SFService()
}
if(YD){
service= new YDService()
}
service.getMailNo();
看到上面的代碼有沒有覺得不舒服? 如果有很多快遞公司,是否會有很多if else。是的,會有很多if else,會有很多類,正如上面的缺點所說。這種時候我們可以使用工廠模式來管理這些類。
寫代碼的一個原則:任何的if else你都要小心,應爲會讓人難受。如果if else過多 你就要考慮使用模式來解決問題了。
#以前做過的排隊算法。體檢引導排隊算法。
#計算快遞價格的算法。