設計模式系列之單例模式

2021-06-16 12:41:31 字數 927 閱讀 5625

在設計模式中,單例模式是屬於比較簡單是卻很實用的一種設計模式,單例模式的含義就是乙個類在程式中只能有不多於1個物件。

但是看似簡單的單例模式,一不小心就會出現一些難以發現的隱藏bug。

問題一:系統擁有多個類載入器

當系統擁有多個類載入器的時候,而又同時使用單例模式,解決辦法就是:為單例的類和單例類指定同乙個類載入器。

問題二:多執行緒情況下,單例模式的初始化以及效能問題。

public class singletion 

return instance;

}}

在多執行緒情況的單例初始化**,很有可能會出現bug

當2個執行緒同時進入到getinstance()方法中,就會出現建立2個例項物件的情況。

解決辦法有3鐘:

一、使用急切初始化

public class singletion 

適用場景:系統初始化的時候就需要這個單例物件,或者占用系統資源不大的情況。

二、加同步關鍵字(synchronized),可以解決這個辦法。

public class singletion

return instance;

}}

適用場景:需要單例的地方並不多而且不頻繁的情況下,因為加了synchronized 關鍵字會導致效能下降至少100倍。

三、「雙重檢查加鎖」

public class singletion 

}} return instance;

}}

適用場景:需要使用單例多的地方或者使用頻繁的情況下,這種情況只有第一次同步的時候會加鎖判斷,之後就不會再加鎖判斷,所以可以解決加鎖對效能的影響問題。

雖然平常的工作中,我們覺得單例模式最簡單的模式,但是結合具體情況,需要具體選擇需要的實現方式

設計模式系列 單例模式

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

設計模式系列 單例模式

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

設計模式系列 單例模式

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