JAVA設計模式 單例模式

2021-07-26 07:14:51 字數 2478 閱讀 1740

單例設計模式

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

核心知識點如下:

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

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

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

/**

* 方法一

* 單例模式的實現:餓漢式,執行緒安全 但效率比較低 */

public

class

singletontest

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

private

static

final singletontest instance = new

singletontest();

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

public

static

singletontest getinstancei()

}

方法一就是傳說的中的餓漢模式

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

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

/**

*方法二

* 單例模式的實現:飽漢式,非執行緒安全

* */

public

class

singletontest

// 定義乙個singletontest型別的變數(不初始化,注意這裡沒有使用final關鍵字)

private

static

singletontest instance;

// 定義乙個靜態的方法(呼叫時再初始化singletontest,但是多執行緒訪問時,可能造成重複初始化問題)

public

static

singletontest getinstance()

}

方法二就是傳說的中的飽漢模式

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

缺點是:併發環境下很可能出現多個singletontest例項。

/**

*方法三

* 單例模式的實現:飽漢式,執行緒安全簡單實現

* */

public

class

singletontest

//定義乙個singletontest型別的變數(不初始化,注意這裡沒有使用final關鍵字)

private

static

singletontest instance;

//定義乙個靜態的方法(呼叫時再初始化singletontest,使用synchronized 避免多執行緒訪問時,可能造成重的復初始化問題)

public

static

synchronized

singletontest getinstance()

}

方法三為方法二的簡單優化

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

缺點是:同步方法頻繁呼叫時,效率略低。

/**

* 方法四

* 單例模式最優方案

* 執行緒安全 並且效率高

* */

public

class

singletontest

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

private

static volatile

singletontest instance;

//定義乙個共有的靜態方法,返回該型別例項

public

static

singletontest getistance()

}

}

return

instance;

}

}

方法四為單例模式的最佳實現。記憶體占用地,效率高,執行緒安全,多執行緒操作原子性。

Java設計模式 單例模式

單例模式 singleton 顧名思義,就是乙個類只有乙個例項。作為物件的建立模式,單例模式確保某乙個類只有乙個例項,而且自行例項化並向整個系統提供這個例項。這個類稱為單例類。顯然單例模式的要點有三個 一是某個類只能有乙個例項 二是它必須自行建立這個例項 三是它必須自行向整個系統提供這個例項。從具體...

java設計模式 單例模式

這個模式是很有意思,而且比較簡單,但是我還是要說因為它使用的是如此的廣泛,如此的有人緣,單例就是單 一 獨苗的意思,那什麼是獨乙份呢?你的思維是獨乙份,除此之外還有什麼不能山寨的呢?我們舉個比較難複製的物件 皇帝中國的歷史上很少出現兩個皇帝並存的時期,是有,但不多,那我們就認為皇帝是個單例模式,在這...

java設計模式 單例模式

單例模式介紹 單例模式分 懶漢式單例 餓漢式單例。單例模式有一下特點 1 單例類只能有乙個例項。2 單例類必須自己自己建立自己的唯一例項。3 單例類必須給所有其他物件提供這一例項。單例模式確保某個類只有乙個例項,而且自行例項化並向整個系統提供這個例項。單例有併發問題,只有乙個例項,多個執行緒就可能同...