1. 程式人生 > >[Java][單例設計模式]

[Java][單例設計模式]

目錄

單例設計模式介紹

設計模式

設計模式是什麼?是設計套路,是解決問題的一種有效的流程,方法,思想。比如解決怎麼吃麵條的問題,你想到了用一根筷子或兩根筷子來吃,小明想到了用勺子來吃,小紅想用叉子來吃,最後實踐知道你提出的用兩根筷子吃麵條比較靠譜,比較高效,能很好地解決吃麵條的問題,那麼下一回吃麵條的時候就不用想了,直接用兩根筷子來吃,這就是設計模式!Java的前輩們應對各種問題,一共提出了23種設計模式,我們今天學習其中的一種:單例設計模式。

單例設計模式

單例即為單個例項,即某一個類只能夠建立一個物件例項。在實際的開發過程中,我們可能會遇到某一個類只能夠有一個物件例項的要求,那麼要怎麼實現這一點呢?

思路

1.類外不能夠new物件,因為這樣的話會變得不可控,不能保證只有一個物件例項了。
2.在類內建立一個本類物件。
3.對外提供一個方法,使得類外可以通過訪問函式來獲取物件例項的引用。

步驟

1.可以通過禁止類外建立的物件的初始化來保證類外不可以new類物件,這點可以通過私有化類的建構函式來實現。
2.在類內通過new關鍵字就可以完成,引用變數應該為類型別。一般地,在類中成員變數不能夠讓類外程式隨意訪問,應該設定為private

,類外程式只能通過類內提供的方法訪問(這樣的話方法中可以設定條件,滿足一定條件才讓訪問類內成員變數)。
3.提供的方法需要返回該類物件例項的引用,所以方法型別為類型別。對外提供方法,但是需要建立本類物件呼叫方法,而本類類外無法建立本類物件,所以此方法應該為靜態,可以直接被類名呼叫。靜態方法裡的變數都應該為靜態變數,所以物件的引用變數也應該為靜態

程式碼(餓漢式)

class Single
{
	private static Single s = new Single();
	private Single(){};
	public static Single getInstance()
	{
		return s;
	}
}
class SingleDemo 
{
	public static void main(String[] args) 
	{
		Single si = Single.getInstance();
	}
}

在類載入的時候就建立了物件,稱之為餓漢式(上來就吃,還很形象),開發的時候用的比較多。

程式碼(懶漢式)

class Single
{
	private static Single s = null;
	private Single(){};
	public static Single getInstance()
	{
		if(s==null)
			s=new Single();
		return s;
	}
}
class SingleDemo 
{
	public static void main(String[] args) 
	{
		Single si = Single.getInstance();
	}
}

類載入的時候不建立物件,什麼時候呼叫函式什麼時候建立物件。面試的時候一般問這種。
注意:該程式碼片段並沒有什麼實際的用處,真正應用時應該把上述程式碼嵌入到需要實現單例的類中。