GOF23-單列模式

1.什麼是單例模式

一個類只有一個實列,而且提供一個對外訪問該實例的全局訪問點。面試

常見應用場景:數據庫鏈接池,項目中讀取配置文件的類,servlet也是單列,Spring中的Bean默認也是單列數據庫

2.單例模式好處

  • 因爲單例模式僅有一個實例,對系統來講性能開銷較小,如:應用程序啓動讀取配置文件時,能夠產生一個單列對象,使其駐留在內存中。
  • 單列模式存在對外全局訪問點,能夠優化環境共享資源的訪問。

3.經常使用單例模式

  1. 餓漢式
  2. 懶漢式
  3. 雙重檢查鎖
  4. 靜態內部類
  5. 枚舉類

通常狀況下,你們知道前兩個已經基本ok了,若是再拿後三個跟面試管去「砍」,相信他會對你刮目相看。安全

  • 餓漢式(線程安全,訪問效率高,不能賴加載)

image

  • 懶漢式(線程安全,訪問效率低,能夠懶加載)

image

  • 雙重檢查鎖

image

image

 

  • 靜態內部類(推薦使用)

image

 

  • 枚舉類(基於JVM底層實現,自然線程安全,不能延遲加載)

image

4.性能對比

測試代碼:性能

image

image

五種單列模式耗時以下:測試

說明:如下只是相對測試結果,機器配置不一樣可能測試結果有出入。優化

    

單列模式名spa

耗時線程

餓漢式 14ms
懶漢式 4404ms
雙重檢查鎖 18ms
靜態內部類 16ms
單例 15ms
相關文章
相關標籤/搜索