單例模式 懶漢,餓漢

2021-10-22 08:40:32 字數 1503 閱讀 7457

1.懶漢模式:顧名思義,他是乙個懶漢,他不願意動彈。什麼時候需要吃飯了,他就什麼時候開始想辦法搞點食物。

即懶漢式一開始不會例項化,什麼時候用就什麼時候new,才進行例項化。

2.餓漢模式:顧名思義,他是乙個餓漢,他很勤快就怕自己餓著。他總是先把食物準備好,什麼時候需要吃了,他隨時拿來吃,不需要臨時去搞食物。

即餓漢式在一開始類載入的時候就已經例項化,並且建立單例物件,以後只管用即可。

3.懶漢式**實現:

public class singleton 

public static synchronized singleton getinstance()

return instance;

}}

4.餓漢式**實現:

public class singleton 

public static singleton getinstance()

}

5.懶漢式和餓漢式的安全和效能區別:

public static synchronized singleton getinstance()

如果這個時候有多個執行緒訪問這個例項,這個時候例項還不存在,還在new,就會進入到方法中,有多少執行緒就會new出多少個例項。乙個方法只能return乙個例項,那最終return出哪個呢?是不是會覆蓋很多new的例項?這種情況當然也可以解決,那就是加同步鎖,避免這種情況發生 。

(2)執行效率:餓漢式沒有加任何的鎖,因此執行效率比較高。懶漢式一般使用都會加同步鎖,效率比餓漢式差。

(3)記憶體使用:餓漢式在一開始類載入的時候就例項化,無論使用與否,都會例項化,所以會佔據空間,浪費記憶體。懶漢式什麼時候用就什麼時候例項化,不浪費記憶體。

適用場景:

系統記憶體中該類只存在乙個物件,節省了系統資源,對於一些需要頻繁建立銷毀的物件,使用單例模式可以提高系統效能。

由於單例模式在記憶體中只有乙個例項,減少了記憶體開銷。

單例模式可以避免對資源的多重占用,例如乙個寫檔案時,由於只有乙個例項存在記憶體中,避免對同乙個資源檔案的同時寫操作。

單例模式可以再系統設定全域性的訪問點,優化和共享資源訪問。

其中使用到單例模式時,考慮較多的就是多執行緒的情況下如何防止被多執行緒同時建立等問題,其中《head first design patterns》使用到「double-checked locking」來降低使用synchronization。

當這個類的物件在多個地方建立的時候,使得內部的方法多次呼叫,但是希望只要乙個物件操作這個方法,或者不希望多個地方同時呼叫這個方法,需要保持這個方法的單一性質,就用單利模式

缺點

當想例項化乙個單例類的時候,必須要記住使用相應的獲取物件的方法,而不是使用new,可能會給其他開發人員造成困擾,特別是看不到原始碼的時候。

懶漢餓漢單例模式

懶漢式單例類,在第一次呼叫時的時候例項化自己 public class singleton private static singleton single null 靜態工廠方法 public static singleton getinstance return single 執行緒安全的懶漢式單...

單例模式 懶漢,餓漢

單例模式 定義 乙個類有且只有乙個例項,並且可以自行例項化向整個系統提供 實現 1.只提供私有的構造方法 2.在該類中建立該型別的私有靜態物件 3.提供乙個靜態的公有方法用於建立,獲取私有物件 餓漢式 建立物件例項的時候直接初始化 假設類名為single1 實現 public class singl...

單例模式(餓漢模式 懶漢模式)

餓漢單例模式 通過單例模式可以保證系統中,應用該模式的類乙個類只有乙個例項 即乙個類只有乙個物件例項 並提供乙個訪問它的全域性訪問點,該例項被所有程式模組共享。設計模式 一書中給出了一種很不錯的實現,定義乙個單例類,使用類的私有靜態指標變數指向類的唯一例項,並用乙個公有的靜態方法獲取該例項。分點表述...