設計模式系列 2 單例模式解析與應用

2021-07-09 04:22:25 字數 1289 閱讀 8591

單例模式是一種物件建立模式,它用於產生乙個唯一的物件具體例項,可以節省常用物件頻繁建立的開銷,也能減輕gc的壓力。在實際開發和框架中有很多應用。

1.執行緒安全、延遲載入的單例模式

public

class singleton

public

static synchronized singleton getinstance()

return instance;

}}

不足之處是效率太低,每次獲取例項物件時都要進行同步操作。

2.雙重檢驗鎖模式

public

class singleton

public

static singleton getinstance()}}

return instance ;

}}

雙重檢驗鎖模式相比第一種模式本質上是縮小了鎖的範圍,鎖只在第一次建立單例物件時起作用,效率會有很大的提高。

3.餓漢模式

public

class singleton

public

static singleton getinstance()

}

單例的例項被宣告成 static 和 final 變數了,在第一次載入類到記憶體中時就會初始化,所以建立例項本身是執行緒安全的。但是在需要進行懶載入的情況下並不適用。

4.靜態內部類寫法的單例模式

public

class singleton

private

singleton(){}

public

static final singletongetinstance()

}

這種寫法仍然使用jvm本身機制保證了執行緒安全問題;由於 singletonholder 是私有的,除了 getinstance() 之外沒有辦法訪問它,因此它是懶漢式的;同時讀取例項的時候不會進行同步,沒有效能缺陷;也不依賴 jdk 版本。

5.列舉方式的單例模式

public

enum enumsingle

不僅能避免多執行緒同步問題,還能防止反序列化重新建立新的物件

一般來說,單例模式有五種寫法:懶漢、餓漢、雙重檢驗鎖、靜態內部類、列舉,如果需要同時考慮到效能和懶載入的場景,個人比較傾向於適用靜態內部類模式。

設計模式系列 單例模式

單例模式 確保乙個類只有乙個例項,並提供乙個全域性訪問點。什麼情況下需要單例模式?一些類提供公共功能供別人呼叫,本身不會處理業務邏輯 類會被許多類和執行緒呼叫 單例模式的一些注意點 單例的生存期超長,會導致記憶體的持續占用。單例在多執行緒環境需要小心的處理執行緒互斥,進行資源保護。單例在類的繼承樹中...

設計模式系列 單例模式

單例模式就是指單例類在一定的生命週期內只能有乙個物件例項,單例類的建立必須是本身,並能給使用者提供自身。在現實世界中,每個生命體都可以被看做是乙個單例物件,唯一且具體,具有不可複製性。同樣的,在軟體開發領域中,有時我們需要保證客戶端在當前的客戶機上只能執行乙個例項這個時候,我們就應該考慮使用單例模式...

設計模式系列 單例模式

今天單位有自己的食堂啦,發郵件收了工卡之後統一拿去啟用,以後就用工卡去食堂吃飯啦,早上2元,中午10元,晚上3元,都是自助噢,很爽,不過還是有一推人沒有第一時間啟用卡,也有的人啟用卡了忘記自己啟用了,我就是其中乙個,無奈下我只好到食堂自己去啟用卡了,餐廳只有乙個機會卡的櫃檯所以啟用的時候需要排隊,還...