設計模式 單例模式的幾種寫法

2021-08-13 04:45:05 字數 2453 閱讀 7084

一、單例模式

單例模式是一種建立型的模式,指某個類採用單例模式後,在這個類被建立後,只產生乙個例項以供外部訪問,且提供乙個全域性的訪問點。

單例模式在開發中具有相當大的重要性,並且**實現相對簡潔。所以其是為數不多的在面試中會被問到且要求手擼**的設計模式哦:)

二、幾種單例的寫法及比較

1. 飽漢模式

package designpatterns.singleton;

/** * created by olive on 2017/12/8.

*/public class singleton1

return instance;

}}

這種模式下,可以做到延遲化載入,但是在多執行緒模式下會產生多個例項,可不就是很「飽」麼xd?此模式非執行緒安全,不推薦使用

2. 飽漢模式改進

package designpatterns.singleton;

/** * created by olive on 2017/12/8.

*/public class singleton2

return instance;

}}

此模式將getinstance方法進行同步,看似解決了執行緒的安全問題,但是同步粒度太大,效率十分低下,不建議使用

3. 餓漢模式

package designpatterns.singleton;

/** * created by olive on 2017/12/8.

*/public class singleton3

}

此模式在類載入時就例項化物件,做到了執行緒安全,但是instance在類裝載時就例項化。但是想象一種場景,如果例項化instance非常得消耗資源,或者例項的使用並非那麼頻繁,我們想讓例項延遲載入,在我們需要使用的時候才被例項化,那這種時候此模式就很不合理了。這是一種十分耗費資源的粗暴的模式,不建議使用

4. 雙重檢查鎖(double-checked locking)

package designpatterns.singleton;

/** * created by olive on 2017/12/8.

*/public class singleton4

}return instance;

}}

此模式將與第二種單例的模式有點類似,減少了同步的開銷。相對來說是乙個合理的單例寫法,但是此模式也並不是完美的。我們知道類的例項化並不是乙個簡單的操作,內部其實主要包含了以下步驟:分配記憶體,初始化,例項指向記憶體。那麼當我們在進入第二個if (instance == null)時,開始為例項分配記憶體,此時其他執行緒執行到第乙個if (instance == null)時,instance並不為空,於是此執行緒將直接返回instance,然而此時的instance因為沒有例項化結束,返回的例項並不是完整的。這就會導致錯誤的發生,這種模式需要慎用

5. 靜態內部類

package designpatterns.singleton;

/** * created by olive on 2017/12/8.

*/public class innersingleton

public static final innersingleton getinstance()

}

此模式起到了延時載入的作用,只有顯示呼叫getinstance方法時,才會顯示裝載getinstance類,從而例項化instance。此方法執行緒安全,推薦使用

6. 列舉

package designpatterns.singleton;

/** * created by olive on 2017/12/8.

*/public class animal

public enum animalsingleton

}

要生成animal的單例可以呼叫animalsingleton.instance. getanimalsingleton。這種模式也是一種執行緒安全的單例實現,但是列舉在開發中用的並不多,所以一般大概也許很少人會採用這種模式吧。

設計模式之單例模式的幾種寫法

經過了前面幾次的面試,我發現面試官對設計模式方面的提問頻率是非常高的,所以學習設計模式是一件刻不容緩的事情,今天我們就來說一下設計模式中的單例模式吧。設計模式並不是什麼神技,而是一套 的設計,是經驗的總結,使用設計模式是為了實現 的復用以及 解耦 關於程式設計裡面解耦的概念可以參考一下下面這篇知乎。...

單例模式幾種寫法

1.餓漢式 public class singleton public static singleton getinstance 2.懶漢式 public class singleton 雙層檢測鎖 public static singleton getinstance return instanc...

單例設計模式的幾種簡單寫法。

單例設計模式 其定義是單例物件的類只能允許乙個例項存在。1,飽漢式 優點 懶載入,節約記憶體空間。缺點 執行緒不安全,當有多個執行緒時,乙個執行緒進入if語句,還沒來得及執行,另乙個執行緒也進去了。結果可能會產生多個例項。public class singleton public static si...