02 單例模式

2021-10-01 22:32:58 字數 873 閱讀 5560

確保某乙個類只有乙個例項,並且自行例項化並向整個系統提供這個例項

減少記憶體開支。特別是乙個物件需要頻繁的建立、銷毀時,並且建立或銷毀時效能有無法優化。

減少了系統的效能開銷。當乙個物件的產生需要較多的資源時,如讀取配置,產生其他依賴物件等。

避免對資源的多重占用,例如寫檔案動作,如果只有乙個例項在記憶體中,可以避免對同乙個資源檔案的同時寫操作

可以在系統設定全域性的訪問點,優化和共享資源訪問

單例模式一般沒有介面,擴充套件困難

測試困難,在並行開發環境中,如果單例模式沒有完成,是不能進行測試的

單例模式與單一職責原則有衝突。

要求生成唯一序列號的環境

在整個專案中需要乙個共享訪問點或共享資料

建立乙個物件需要消耗的資源過多

需要定義大量的靜態常量和靜態方法的環境,如工具類

在高併發的情況下,要注意單例模式的執行緒同步問題

考慮物件的復用

壞單例模式

1. 餓漢模式

餓漢模式其實就是一種預載入機制,在使用前就完成物件的例項化

缺點在類載入時就完成了例項化,如果一直沒有用到這個例項,就會造成記憶體浪費

2. 懶漢模式(不同步)

懶漢模式其實就是懶載入的意思,在使用時再進行例項化,不用則不建立物件

3.同步方法

通過同步方法加鎖,使其執行緒安全

4.同步**塊

將同步方法換成同步**塊,以增加呼叫getinstance方法的效率

5.雙檢鎖

通過兩次判空的方式優化第四個方法

6.帶volatile關鍵字的雙檢鎖

通過雙檢索的方式優化第四個方法

7.靜態內部類

通過靜態內部類的方式實現懶載入,與執行緒安全

8.列舉

設計模式 02 單例模式

1 餓漢模式 宣告靜態物件時,已經初始化。public class singleton public static singleton getinstance 2 懶漢模式 第一次呼叫getinstance時進行初始化。缺點 每次呼叫getinstance都進行同步,造成不必要的同步開銷。publi...

設計模式 02 單例模式

參考 需要某個類只保留乙個物件,如資料庫連線 網路連線 執行緒池等。只能有乙個例項 單例類必須建立自己的唯一例項 單列類向其他物件提供這一例項 單例可以繼承與被繼承,方法可以重寫。靜態類不行 單例產生的物件常駐記憶體。靜態類物件執行後會被釋放,被gc清理 單例模式可以延遲載入,靜態類在第一次執行時被...

設計模式 02 單例模式

餓漢式 靜態 塊 懶漢式 執行緒不安全 懶漢式 執行緒安全,同步方法 懶漢式 執行緒不安全,同步 塊 雙重檢查 推薦 靜態內部類 推薦 列舉注意事項和細節說明 所謂的單例設計模式,就是採取一定的方法,保證在整個的軟體系統中,對某個類只能存在乙個物件例項,並且該類只提供乙個取得其物件例項的方法 靜態方...