JAVA設計模式之 單例模式【Singleton Pattern】

小呂-ICE發表於2014-11-09

一、概述

    確保某一個類只有一個例項,而且自行例項化並向整個系統提供這個例項,這個類稱為單例類,它提供全域性訪問的方法。單例模式是一種物件建立型模式。


二、適用場景

    系統/應用只需要一個例項物件,確保物件的唯一性。


三、UML類圖

    

四、參與者

    Singleton(單例類):在單例類的內部實現只生成一個例項,同時它提供一個靜態的getInstance()工廠方法,讓客戶可以訪問它的唯一例項;為了防止在外部對其例項化,將其建構函式設計為私有;在單例類內部定義了一個Singleton型別的靜態物件,作為外部共享的唯一例項。


五、用例學習

單例模式兩種不同的實現方式:

    1、餓漢式單例模式:

/**
 * 單例類:餓漢式單例模式
 * @author  lvzb.software@qq.com
 *
 */
public class EagerSingleton {
	/** 定義私有靜態變數  類載入的時候就已經建立了單例物件 */
	private static final EagerSingleton instance = new EagerSingleton();
	
	/**
	 * 私有建構函式  只能被自身呼叫例項化
	 */
	private EagerSingleton(){
		
	}
	
	/**
	 * 獲取單例例項物件
	 * @return
	 */
	public static EagerSingleton getInstance(){
		return instance;
	}

}

    2、懶漢式單例模式:

/**
 * 單例模式一:懶漢式單例模式
 * @author  lvzb.software@qq.com
 *
 */
public class LazySingleton {
	/** 私有靜態成員變數 儲存唯一例項  */
	private static LazySingleton instance;
	
	/**
	 * 私有建構函式 只能被自身呼叫例項化
	 */
	private LazySingleton() { 
		
	}
	
	/**
	 * 獲取單例例項物件
	 * @return
	 */
	public synchronized static LazySingleton getInstance(){
		if (instance == null){
			instance = new LazySingleton();
		}
		return instance;
	}

}



相關文章