天天看點

Java丨單例、政策、工廠設計模式

設計模式( Design pattern)

是軟體開發人員在軟體開發過程中面臨的一般問題的解決方案。這些解決方案是衆多軟體開發人員經過相當長的一-段

時間的試驗和錯誤總結出來的。

設計模式是軟體開發中的精髓,掌握設計模式,在解決某些常見問題時,讓我們有了相對固定的思路

一、單例設計模式

單例模式( Singleton) :

是一種常用的軟體設計模式。在它的核心結構中隻包含一個被稱為單例的特殊類。通過單例模式可以保證系統中,應

用該模式的類-一個類隻有一個執行個體。即一個類隻有一個對象執行個體。

實作核心點:

1、構造方法私有化

2、聲明一個本類對象

3、給外部提供一個靜态方法擷取對象執行個體

兩種實作方式:

1、餓漢式

2、懶漢式

注意:單例模式是面試中的必考題

Java丨單例、政策、工廠設計模式

單例模式之餓漢式實作:

在類被加載後,對象被建立,到程式結束後釋放

Java丨單例、政策、工廠設計模式

單例模式之懶漢式實作:

在第一次調用getInstance方法時,對象被建立,

到程式結束後釋放。

Java丨單例、政策、工廠設計模式

單例模式在實際開發中的應用:

1、在設計一些工具類的時候(通常工具類,隻有功能方法,沒有屬性)

2、工具類可能會被頻繁調用

目的是為了節省重複建立對象所帶來的記憶體消耗,進而來提高效率

單例懶漢式的線程安全問題:

Java丨單例、政策、工廠設計模式

優點:在多線程情形下,保證了“懶漢模式”的線程安全。

缺點:衆所周知在多線程情形下,synchronized方 法通常

效率低,顯然這不是最佳的實作方案。

DCL雙檢查鎖機制( DCL: double checked locking )

Java丨單例、政策、工廠設計模式

單例模式的最佳實作方式。記憶體占用率高,效率高,線程安全,多線程操作原子性。

二、政策設計模式

政策模式(Strategy Pattern),定義了一-系列的算法,将每一種算法封裝起來并可以互相替換使用,政策模式讓算

法獨立于使用它的客戶應用而獨立變化。

OO設計原則:

1、面向接口程式設計(面向抽象程式設計)

2、封裝變化

3、多用組合,少用繼承

Java丨單例、政策、工廠設計模式

把可變的行為抽象出來,這樣的好處是這些行為可以在真正使用時互相替換

Java丨單例、政策、工廠設計模式

政策模式的實際應用:

1、資料庫操作封裝

2、微信掃碼登入注冊綁定操作

....

思考:什麼應用場景下,我們應該選擇政策設計模式?

當一個功能有多種實作方式時,我們應該使用政策設計模式,把

功能抽象出來,然後用不同的子類各自提供實作類,在真正使用

時,根據業務情況來動态替換。

三、工廠設計模式

工廠模式(Factory Pattern)是Java中最常用的設計模式之-一。這種類型的設計模式屬于建立型模式,它提供了一種

建立對象的最佳方式。在工廠模式中,我們在建立對象時不會對用戶端暴露建立邏輯,并且是通過使用一個共同的接

口來指向新建立的對象。

Java丨單例、政策、工廠設計模式

沒有工廠模式的樣子:

Java丨單例、政策、工廠設計模式
Java丨單例、政策、工廠設計模式

使用工廠模式來改進:

Java丨單例、政策、工廠設計模式
Java丨單例、政策、工廠設計模式

工廠模式要解決的問題: 

讓調用者與被調用者之間解耦

這樣好處是,當兩者發生變化時,互相之間的影響降到最低,這個原則體顯了項目的可維護性

工廠設計模式的優點

面向接口程式設計,展現了面向對象的思想;

将建立對象的工作轉移到了工廠類;

JDK中的工廠設計模式執行個體

java.util.Calendar, ResourceBundle and NumberFormat getInstance()使用了工廠方法模式;

valueOf()在包裝類中,如Boolean, Integer也使用了工廠方法模式;

Spring架構中,就是使用了工廠模式來解決對象的建立

總結:

1、設計模式如同孫子兵法一樣,在項目開發中優為重要.

2、單例設計模式是面試必考題,也是項目應用中被廣泛使用的模式,通常用在一些工具類的實作中,單例的另一種實作

是使用枚舉(了解)

3、政策模式的思想可以很好的體顯封裝變化,當我們已知或未知某功能的實作可能會有多種時,我們都應該采用這個模式

4、工廠模式可以降低對象之間的耦合性,項目中代碼的可維護性也是-一個重要名額

了解設計模式的精髓,讓我們的代碼具有:可維護性、可擴充性、更加健壯,讓代碼更加優雅,因為我們是進階程式員