一、概述
確保某一個類只有一個實例,而且自行實例化並向整個系統提供這個實例,這個類稱爲單例類,它提供全局訪問的方法。單例模式是一種對象創建型模式。
二、適用場景
系統/應用只需要一個實例對象,確保對象的唯一性。
三、UML類圖
四、參與者
Singleton(單例類):在單例類的內部實現只生成一個實例,同時它提供一個靜態的getInstance()工廠方法,讓客戶可以訪問它的唯一實例;爲了防止在外部對其實例化,將其構造函數設計爲私有;在單例類內部定義了一個Singleton類型的靜態對象,作爲外部共享的唯一實例。
五、用例學習
單例模式兩種不同的實現方式:
1、餓漢式單例模式:
/**
* 單例類:餓漢式單例模式
* @author [email protected]
*
*/
public class EagerSingleton {
/** 定義私有靜態變量 類加載的時候就已經創建了單例對象 */
private static final EagerSingleton instance = new EagerSingleton();
/**
* 私有構造函數 只能被自身調用實例化
*/
private EagerSingleton(){
}
/**
* 獲取單例實例對象
* @return
*/
public static EagerSingleton getInstance(){
return instance;
}
}
2、懶漢式單例模式:
/**
* 單例模式一:懶漢式單例模式
* @author [email protected]
*
*/
public class LazySingleton {
/** 私有靜態成員變量 存儲唯一實例 */
private static LazySingleton instance;
/**
* 私有構造函數 只能被自身調用實例化
*/
private LazySingleton() {
}
/**
* 獲取單例實例對象
* @return
*/
public synchronized static LazySingleton getInstance(){
if (instance == null){
instance = new LazySingleton();
}
return instance;
}
}