天天看點

單例模式Singleton(建立模式)

沒有使用單例模式之前

使用單例模式後

優點

單例設計模式有八種

弊端:

如果把person換成dbaccess這個工具類,我們可以發現整個項目會建立出多個工具類執行個體,浪費空間。

實際上:

整個項目,我們隻需要一個工具類執行個體,就可以維持項目的正常運作,那麼此時讓該工具類實作單例,解決資源浪費的情況。

單例模式Singleton(建立模式)

案例代碼

運作顯示

單例模式Singleton(建立模式)

如下圖和案例的結果,可以得出結論:

整個項目使用到工具類,隻需要執行個體化一次就可以保障整個項目的運轉,節約了堆記憶體的空間

單例模式Singleton(建立模式)

分類:

餓漢式(靜态常量)

餓漢式(靜态代碼塊)

懶漢式(線程不安全)

懶漢式(線程安全,同步代碼塊)

懶漢式(線程安全,同步方法)

雙重檢查

靜态内部類

枚舉

1.餓漢式(靜态常量)

2.餓漢式(靜态代碼塊)

** 3.懶漢式(線程不安全)**

4. 懶漢式(線程安全,同步代碼塊)

5.懶漢式(線程安全,同步方法)

6.雙重檢查

7.靜态内部類

8.枚舉

client類就不能直接person p = new person();

避免了寫多個執行個體的建立,保證了空間不會被浪費

單例模式Singleton(建立模式)

結論:

單例中兩種餓漢式可用,但存在性能問題

單例中三種餓漢式不推薦,存線上程安全問題,同步方法的方式解決性能極差

最後三種單例式值得推薦(雙重檢查、靜态内部類、枚舉)

注意事項

系統記憶體中該類隻存在一個對象,節省了系統資源,對于一些需要頻繁建立銷毀的對象使用單例模式可以提升系統性能

當想執行個體化一個單例類的時候,必須要記住使用相應的擷取對象的方法,而不是使用new

應用

jdk源碼中runtime類

tomcat中applicationcontext類

session工廠

建議單例使用餓漢式,代碼更加簡潔

繼續閱讀