設計模式之單例模式

2021-08-11 14:19:59 字數 2163 閱讀 2749

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; } }

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

設計模式之單例模式

前一段時間買了一本秦小波寫的 設計模式之禪 網上對這書的評價很高。現在還沒有看很多,但是有些地方頗有感觸,也並不是所有的地方都能看懂,但是會慢慢研究的。自己對於設計模式的感覺就是乙個字 牛!感覺會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...