-
一、基本實施思路:
單例的實現分為兩個步驟:
1.將類的建構函式定義為私有方法,使其他地方的**無法通過呼叫類的建構函式來例項化類的物件,而只能通過類提供的靜態方法獲取類的唯一例項;
2.在類中提供乙個靜態方法,當我們呼叫這個方法時,如果類持有的引用不為空,則返回引用,如果類保留的引用為空,則會建立乙個類的例項,並將例項的引用給出給類保留的引用。
2、演示如下:
1. 列舉實現單例:
2. 惰性執行緒不安全:
3.懶人執行緒安全:
4.飢餓的漢式:
5.雙檢查鎖:
6. 靜態內部類:
-
單例模式確保乙個類只有乙個例項,例項化自身,並使其全域性可供整個系統使用。 它不會建立例項的副本,而是返回對儲存在單一例項類中的例項的引用。
**主要有兩種寫法:
1.飢餓的漢式風格。
public class singleton1 ;私有無引數建構函式。
private static singleton1 instance = new singleton1();
private static singleton1 getinstance();
private volatile static singleton2 instance;此外,volite 可防止指令重排。
private static singleton2 getinstance(){if (instance == null) {
同步(鎖定可防止多個執行緒生成多個例項。
if (instance == null) {
instance = new singleton2();指令被重新排序,賦值首先完成,但建構函式尚未執行。
return instance;
仔細檢查,執行緒安全。
-
一般來說,單例模式有幾種形式:
public class singleton
在你自己內在定義乙個你自己的例項不是很奇怪嗎?
請注意,這是私有的,僅適用於內部通話。
private static singleton instance = new singleton();
有乙個靜態方法用於外部訪問類,可以直接訪問。
public static singleton getinstance()
可以使用單狀態類進行訪問。
上面的第二種形式是延遲初始化,這意味著初始單例是第一次呼叫,以後不需要重新生成。
注意 laty initialization 形式的 synchronized,這個 synchronized 非常重要,如果沒有同步,那麼可以使用 getinstance() 獲取多個單例例項。 關於涉及雙重檢查鎖定 (DCL) 的 Singleton for Lazy Initialization 的討論很多,有興趣的人有興趣進一步研究。
第一種形式通常被認為更安全。
-
有五種方法可以實現單例模式:
1.飢餓模式。 執行緒安全,可呼叫和推斷,無延遲載入。
2.懶惰模式。 執行緒安全、低效呼叫和延遲載入。
3.雙檢測鎖定模式。 由於 JVM 的底層模型,偶爾會出現問題,因此不建議使用它。
4.靜態內部類別。 執行緒安全、可呼叫的效率和延遲載入。
5. 列舉類。 執行緒安全、可呼叫的效率、延遲載入以及防止呼叫的反射和反序列化。
-
單例模式旨在避免同一例項生成的模式被重複生成。
例項占用大量記憶體空間,多個變數指向同乙個物件,可以節省記憶體。
單例模式的核心:
施工方法的私有化。 私有化的轉殖方法。 私有化的靜態變數。 面向公眾的靜態方法。 設定三個私人和乙個公共的原因:
私有化的建設方式只允許使用一套公共的方法,而建丹就是乙個垂直例項。 Kezon 方法的私有化是為了避免使用 public 方法獲取例項,然後通過轉殖來轉殖新物件。 私有化的靜態變數用於儲存類的例項化物件。
公共靜態方法用於儲存例項化物件以供外部訪問。
-
單例模式是一種常見的軟體設計模式。 從本質上講,它只包含乙個稱為單例的特殊類。
擴充套件:1、單例模式的要點:第一,某一類只能有乙個例項; 第二個是它必須自己建立例項; 第三,它必須自己向整個系統提供這個例項。
二、單例模式的優缺點:
優點: 1. 例項控制 2.靈活性。
缺點: 1. 開銷 2.可能的發展混淆 3.物件生存期。
3.單例模式是最簡單的設計模式形式之一。 此模式的目的是使類的物件成為系統中的唯一例項。 為此,您可以先在客戶端上例項化它。
因此,需要一種機制,該機制只允許生成物件類的唯一例項,並“阻止”對要生成的所有物件的訪問。 使用工廠方法限制例項化過程。 此方法應該是靜態的(類方法),因為讓類的例項生成另乙個唯一例項是沒有意義的。
-
單例模式可以說是GOF設計模式中最簡單的一種,也是最受恥辱的一種。 但是,許多類似的評論都讓我印象深刻,認為它是最糟糕的和反模式的。
該模式本身很簡單,除了關於多執行緒安全問題的一點模糊。 所以,我真的不想討論 gof 提供的模式的參考實現。 我關心的是思考和思考其背後問題的方式。
我們先來看看單例模式出現的背景。 單例模式就是要確保類只有乙個例項。 好吧,那麼讓我們問一下,為什麼要確保類只有乙個例項?
其實無非是兩個方面:第一,如果要控制資源的使用,體現在兩個方面,一是通過控制例項的生成來節省資源,二是通過執行緒同步來控制資源的併發訪問; 其次,它旨在用作通訊媒介,允許兩個不相關的程式在不建立直接關係的情況下進行通訊,尤其是多執行緒。 第二點,我說的是抽象的東西,但簡單地說,這就像人們在黑板上討論事情,而不關心誰參與了討論。
單身人士扮演黑板的角色。
-
科比·布萊恩特(Kobe Bryant)仍然是詹姆斯(James)的好。
寫思路:要講好乙個故事,要把握時間、地點、人物、原因、過程、結果六個要素,在此基礎上,才能把故事講得完整透徹,進而做出第一感的表達,讓文章一氣呵成,讓讀者產生共鳴。 >>>More
寫現代詩可以模仿別人寫得好的現代詩,比如寫古詩,借它的語氣,借用它的語言節奏,借用它的修辭手法,借用別人的智慧來豐富自己的作品。 >>>More