設計模式( Design pattern)
是軟體開發人員在軟體開發過程中面臨的一般問題的解決方案。這些解決方案是衆多軟體開發人員經過相當長的一-段
時間的試驗和錯誤總結出來的。
設計模式是軟體開發中的精髓,掌握設計模式,在解決某些常見問題時,讓我們有了相對固定的思路
一、單例設計模式
單例模式( Singleton) :
是一種常用的軟體設計模式。在它的核心結構中隻包含一個被稱為單例的特殊類。通過單例模式可以保證系統中,應
用該模式的類-一個類隻有一個執行個體。即一個類隻有一個對象執行個體。
實作核心點:
1、構造方法私有化
2、聲明一個本類對象
3、給外部提供一個靜态方法擷取對象執行個體
兩種實作方式:
1、餓漢式
2、懶漢式
注意:單例模式是面試中的必考題
單例模式之餓漢式實作:
在類被加載後,對象被建立,到程式結束後釋放
單例模式之懶漢式實作:
在第一次調用getInstance方法時,對象被建立,
到程式結束後釋放。
單例模式在實際開發中的應用:
1、在設計一些工具類的時候(通常工具類,隻有功能方法,沒有屬性)
2、工具類可能會被頻繁調用
目的是為了節省重複建立對象所帶來的記憶體消耗,進而來提高效率
單例懶漢式的線程安全問題:
優點:在多線程情形下,保證了“懶漢模式”的線程安全。
缺點:衆所周知在多線程情形下,synchronized方 法通常
效率低,顯然這不是最佳的實作方案。
DCL雙檢查鎖機制( DCL: double checked locking )
單例模式的最佳實作方式。記憶體占用率高,效率高,線程安全,多線程操作原子性。
二、政策設計模式
政策模式(Strategy Pattern),定義了一-系列的算法,将每一種算法封裝起來并可以互相替換使用,政策模式讓算
法獨立于使用它的客戶應用而獨立變化。
OO設計原則:
1、面向接口程式設計(面向抽象程式設計)
2、封裝變化
3、多用組合,少用繼承
把可變的行為抽象出來,這樣的好處是這些行為可以在真正使用時互相替換
政策模式的實際應用:
1、資料庫操作封裝
2、微信掃碼登入注冊綁定操作
....
思考:什麼應用場景下,我們應該選擇政策設計模式?
當一個功能有多種實作方式時,我們應該使用政策設計模式,把
功能抽象出來,然後用不同的子類各自提供實作類,在真正使用
時,根據業務情況來動态替換。
三、工廠設計模式
工廠模式(Factory Pattern)是Java中最常用的設計模式之-一。這種類型的設計模式屬于建立型模式,它提供了一種
建立對象的最佳方式。在工廠模式中,我們在建立對象時不會對用戶端暴露建立邏輯,并且是通過使用一個共同的接
口來指向新建立的對象。
沒有工廠模式的樣子:
使用工廠模式來改進:
工廠模式要解決的問題:
讓調用者與被調用者之間解耦
這樣好處是,當兩者發生變化時,互相之間的影響降到最低,這個原則體顯了項目的可維護性
工廠設計模式的優點
面向接口程式設計,展現了面向對象的思想;
将建立對象的工作轉移到了工廠類;
JDK中的工廠設計模式執行個體
java.util.Calendar, ResourceBundle and NumberFormat getInstance()使用了工廠方法模式;
valueOf()在包裝類中,如Boolean, Integer也使用了工廠方法模式;
Spring架構中,就是使用了工廠模式來解決對象的建立
總結:
1、設計模式如同孫子兵法一樣,在項目開發中優為重要.
2、單例設計模式是面試必考題,也是項目應用中被廣泛使用的模式,通常用在一些工具類的實作中,單例的另一種實作
是使用枚舉(了解)
3、政策模式的思想可以很好的體顯封裝變化,當我們已知或未知某功能的實作可能會有多種時,我們都應該采用這個模式
4、工廠模式可以降低對象之間的耦合性,項目中代碼的可維護性也是-一個重要名額
了解設計模式的精髓,讓我們的代碼具有:可維護性、可擴充性、更加健壯,讓代碼更加優雅,因為我們是進階程式員