設計模式之單例模式

2022-01-10 07:05:48 字數 1595 閱讀 2893

​ 單例模式在23中設計模式中是最為基礎的一種,並且使用範圍非常廣泛,屬於設計模式中的建立型模式。

什麼是單例:指某乙個類只允許存在乙個例項物件。

單例模式特點:

單例模式的實現:懶漢式,餓漢式。

​ 餓漢式單例模式,字面理解就是很餓很急的感覺。因此這種單例物件就是即時建立,類初始化完成時該物件就已經建立完成。使用起來很方便,但是很容易產生較多的垃圾物件,同時浪費記憶體空間,下面請看示例**:

public class singleton 

// 對外提供訪問物件的介面

public static singleton getsingleton()

}

​ 餓漢式是執行緒安全的,在類載入時就已經建立完成。

​ 懶漢式的建立方式與餓漢式相反,即什麼時候用到就什麼時候建立,典型的懶載入機制。因此在多執行緒情況下是執行緒不安全的,容易重複建立物件,違背了單例模式的原則。

public class singleton2 

public static singleton2 getinstance()

return singleton2;

}}

​ 對於懶載入執行緒不安全問題,可以使用synchronized,雙重檢驗鎖。

​ synchronized可以保證執行緒安全,但是我們都知道,使用這種方式效率是很低的,因為程式會不斷判斷鎖是否存在,判斷獲取鎖,釋放鎖。(不推薦使用)

public class singleton 

// 同步方法

public static synchronized singleton getinstance()

return instance;

}}

​ 這裡先說明以下,雙重檢驗鎖不是指使用兩次synchronized關鍵字,而是在鎖之前先判斷一次單例物件是否已經存在,如果存在則直接獲取。不存在再進入同步方法中,但是靜態成員變數需要被volatile修飾,防止發生指令重排。

public class singleton3   

public static singleton3 getsingleton()

} }

return singleton;

} }

​ 靜態內部類,這種內部類與其外部類之間並沒有先後級別,載入外部類的時候,並不會同時載入靜態內部類,而只有呼叫的時候才會進行載入,此時便建立出單例物件。那麼對於執行緒安全問題來說,因為使用靜態初始化方式,所以在jvm中就會自動保證執行緒安全問題。

public class singleton4   

private singleton4 (){}

public static final singleton4 getinstance()

}

​ 對於以上幾種方式,要根據實際業務進行選擇,但通常情況下餓漢式的使用會多一些,但這不絕對。

感謝閱讀!

設計模式之單例模式

前一段時間買了一本秦小波寫的 設計模式之禪 網上對這書的評價很高。現在還沒有看很多,但是有些地方頗有感觸,也並不是所有的地方都能看懂,但是會慢慢研究的。自己對於設計模式的感覺就是乙個字 牛!感覺會23種設計模式並且會熟練運用的人,真的就是大師級的牛人了,設計模式是乙個專案主管或者架構師一定要會的東西...

設計模式之單例模式

package com.xie.singleton public class singleton 提供乙個共有的靜態的入口方法 public static singleton getinstance 懶漢式 延遲載入 提供乙個私有的靜態的成員變數,但不做初始化 private static sing...

設計模式之 單例模式

單例模式 singleton 保證乙個類僅有乙個例項,並提供乙個訪問它的全域性訪問點。單例模式 單件模式 使用方法返回唯一的例項 public class singleton private static singleton instance public static singleton geti...