JAVA單例模式(Singleton)

         單例模式主要用於:有一些對象我們只需要一個,比如:線程池、緩存、對話框、處理偏好設置、註冊表對象、日誌對象以及配置文件對象、數據庫連接對象等等。單例模式常用於管理共享資源,例如:數據庫連接或者線程池。

        Java Singleton模式就爲我們提供了這樣實現的可能。使用Singleton的好處還在於可以節省內存,因爲它限制了實例的個數,有利Java垃圾回收(garbagecollection)。

這些對象只能有一個實例,如果製造出多個實例,就會導致很多問題如:程序異常、資源使用過量等。

        單例模式很像靜態類,它自身有一個全局訪問點但是又沒有全局變量的缺點:如果將一個對象賦值給一個全局變量,那麼你必須在程序一開始的時候就得創建好對象,如果執行過程中沒有用到,就會非常耗費資源。

        單例模式主要有三個部分:

         1.私有構造方法:防止外部實例化,只有內部可以實例化

         2.有一全局靜態方法:

               (1).可以訪問私有的構造方法進行實例化。

               (2).外部調用靜態方法,如果存在singleton實例就返回,如果不存在則創建一個實例.自己進行對實例進行管理.

         3.靜態變量:利用一個靜態變量來記錄Singleton的唯一實例。

    

單例模式的UML非常簡單,但是真正用好單例模式,也是有點難度的

          單例模式的源代碼如下:

 

public class Singleton{
	
	//利用一個靜態變量來記錄Singleton類的唯一實例
	private static Singleton uiqueInstance;
	
	//把構造函數聲明爲私有的,外部不可以實例化,只有內部可以實例化
	private Singleton(){
		
	}
	
	//外部通過調用靜態方法getInstance(),來獲得實例化對象	
	public static Singleton getInstance(){
		//內部自己管理實例,始終保證只有一個實例
		  
		if(uniqueInstance == null) {
			//如果沒有實例,則創建實例,在類的內部可以訪問構造函數,進而實例化
			uniqueInstance = new Singleton();
		} 
		//如果已經存在就直接將實例返回就行了
		return uniqueInstance;
	}
}


 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章