Java單例模式詳解

2021-08-01 22:48:10 字數 1937 閱讀 3885

設計模式有很多種,相信大家用的最多的應該是單例設計模式,也是應用最為廣泛的設計模式。下面將帶領大家來學習下。

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

乙個單例模式的核心是什麼?

將採用單例設計模式的類的構造方法私有化(採用private修飾)。

在其內部產生該類的例項化物件,並將其封裝成private static型別。

定義乙個靜態方法返回該類的例項。

必須滿足上面三點才能稱作單例設計模式。下面**實現下

**如下:

public

class singleton

// 將自身的例項物件設定為乙個屬性,並加上static和final修飾符

private

static final singleton minstance = new singleton();

// 靜態方法返回該類的例項

public

static singleton getinstance()

}

優點:寫起來比較簡單,而且不存在多執行緒同步問題,避免了synchronized所造成的效能問題

缺點:當類singleton被載入的時候,會初始化static的minstance,靜態變數被建立並分配記憶體空間,從這以後,這個static的minstance物件便一直佔著這段記憶體(即便你還沒有用到這個例項),當類被解除安裝時,靜態變數被摧毀,並釋放所占有的記憶體,因此在某些特定條件下會耗費記憶體。

**如下:

public

class singleton

//定義乙個靜態方法,用於獲取例項,這裡會有執行緒安全性問題

public

static singleton getinstance ()

return minstance;

}}

優點:寫起來比較簡單,當類singleton被載入的時候,靜態變數static的minstance未被建立並分配記憶體空間,當getinstance方法第一次被呼叫時,初始化instance變數,並分配記憶體,因此在某些特定條件下會節約了記憶體;

缺點:多執行緒環境下很可能出現多個singleton例項。

**如下:

public

class

singleton

//定義乙個靜態方法,用於獲取例項,使用synchronized 避免多執行緒訪問時,可能造成重的復初始化問題,效能有點低

public

static

synchronized singleton getinstance ()

return minstance;

}}

優點:使用synchronized關鍵字避免多執行緒訪問時,出現多個singleton例項。

缺點:頻繁訪問的時候由於同步問題,導致效能比較低

**如下:

public

class

singleton

//定義乙個靜態私有變數(不初始化,不使用final關鍵字,使用volatile保證了多執行緒訪問時minstance變數的可見性,避免了minstance初始化時其他變數屬性還沒賦值完時,被另外執行緒呼叫)

public

static

volatile singleton getinstance () }}

return minstance;

}}

注意:該方法是多執行緒情況下最佳的實現單例的方案

JAVA單例模式詳解

什麼是單例模式 單例模式 singleton pattern 是指確保乙個類在任何情況下都絕對只有乙個例項,並 提供乙個全域性訪問點。單例模式是建立型模式。public class hungrysingleton public static hungrysingleton getinstance 還...

java 單例模式詳解

單例物件的類必須保證只有乙個例項存在 這是維基百科上對單例的定義,這也可以作為對意圖實現單例模式的 進行檢驗的標準。對單例的實現可以分為兩大類 懶漢式和餓漢式,他們的區別在於 singleton類稱為單例類,通過使用private的建構函式確保了在乙個應用中只產生乙個例項,並且是自行例項化的 在si...

Java設計模式詳解之單例模式

解決的問題 保證乙個類在記憶體中的物件唯一性。eg 多程式讀取乙個配置檔案時,建議配置檔案封裝成物件。會方便操作其中資料,又要保證多個程式讀到的是同乙個配置檔案物件,就需要該配置檔案物件在記憶體中是唯一的。不讓其他程式建立該類物件。在本類中建立乙個本類物件。對外提供方法,讓其他程式獲取這個物件。pu...