JAVA_SE基礎——38.單例設計模式

本文繼續介紹23種設計模式系列之單例模式。html

咱們在javaSE的基礎學習中,會講到:單例設計模式、模板設計模式、裝飾者設計模式、觀察者設計模式、工廠設計模式  java


我之後隨着水平的提升,我會專門開個分類寫設計模式的。如今請原諒個人知識面有限……面試


設計模式→中的    「模式」 二字是什麼意思。。設計模式


模式:模式就是解決 一類 問題的固定步驟 。安全

模式的概念最先起源於建築行業....


建房子的步驟都是同樣子:
多線程


打地基-----> 澆柱子------->蓋樓面--------->砌牆--------->封頂---->裝修-----入住函數


單例設計模式:保證一個類在內存中只有一個對象。學習


首先來明確一個問題,那就是在某些狀況下,有些對象,咱們只須要一個就能夠了,測試

好比,一臺計算機上能夠連好幾個打印機,可是這個計算機上的打印程序只能有一個,spa

這裏就能夠經過單例模式來避免兩個打印做業同時輸出到打印機中,

即在整個的打印過程當中我只有一個打印程序的實例。簡單說來,單例模式(也叫單件模式)的做用就是保證在整個應用程序的生命週期中,任何一個時刻,單例類的實例都只存在一個(固然也能夠不存在)。


單例設計模式有兩種: (可是寫法不少種)

餓漢單例設計模式
1. 私有化構造函數。
2. 聲明本類的引用類型變量,而且使用該變量指向本類對象。
3. 提供一個公共靜態的方法獲取本類的對象。

懶漢單例設計模式:
1. 私有化構造函數。
2. 聲明本類的引用類型變量,可是不要建立對象,
3. 提供公共靜態 的方法獲取本類 的對象,獲取以前先判斷是否已經建立了本類 對象
,若是已經建立了,那麼直接返回對象便可,若是尚未建立,那麼先建立本類的對象,
而後再返回。

推薦使用: 餓漢單例設計模式。  由於懶漢單例設計模式會存在線程安全問題,目前還不能保證一類在內存中只有一個對象。 可是也要熟悉懶漢單例模式,由於面試常常會面這個。。



測試代碼1:(餓漢單例模式):

//餓漢單例設計模式 ----> 保證Single在在內存中只有一個對象。
class Single{

	//聲明本類的引用類型變量,而且使用該變量指向本類對象
	private static	Single s = new Single();

	//私有化構造函數
	private Single(){}

	//提供一個公共靜態的方法獲取本類的對象
	public	static  Single getInstance(){
		return s;
	}
}
class Demo2 
{
	public static void main(String[] args) 
	{
		Single s1 = Single.getInstance();
		Single s2 = Single.getInstance();
		System.out.println("是同一個對象嗎?"+ (s1==s2));
	}
}

運行結果:




測試代碼2:(懶漢單例模式):

//餓漢單例設計模式 ----> 保證Single在在內存中只有一個對象。
class Single{

	//聲明本類的引用類型變量,而且使用該變量指向本類對象
	private static	Single s = null;

	//私有化構造函數
	private Single(){}

	//提供一個公共靜態的方法獲取本類的對象
	public	static  Single getInstance(){
		if(s==null){
			s = new Single();
		}
		return s;
	}
}
class Demo2 
{
	public static void main(String[] args) 
	{
		Single s1 = Single.getInstance();
		Single s2 = Single.getInstance();
		System.out.println("是同一個對象嗎?"+ (s1==s2));
	}
}

運行結果:




懶漢式單例模式 ……關於線程問題也要等我再深刻學習我才懂(我本身都沒學到多線程)

反正這篇blog 就看成是入門文檔了,不能當最終版本的,由於個人知識面有限,抱歉。關於單列模式的東西 目前我也才學到這些,期待個人文章的人,能夠粉我,到時我會專門開個分類來詳細的寫設計模式的 。。奮鬥

相關文章
相關標籤/搜索