我理解的--java 單例模式

這只是本身學習的筆記。 java

簡單的說就是一個類只能建立一個實體(實體1 == 實體2), android

通常狀況下一個類能夠建立無數個實體,好比一個class Cat 函數

cat1 = new Cat(); 學習

cat2 = new Cat(); 測試

cat1 == cat2 返回的是false。 spa

要想cat1 == cat2,就用單利模式,這樣有什麼好處:在 計算機系統中,線程池、打印機、顯卡的驅動程序對象常被設計成單例。這些應用都或多或少具備資源管理器的功能。每臺計算機能夠有 若干個打印機,但只能有一個Printer Spooler,以免兩個打印做業同時輸出到打印機中。 .net


                                     正常 線程

                         單利模式 設計

能夠這樣想:java static的變量只有一個,屬於類,那就能夠利用這個關鍵字。建立一個實體能夠用new或者寫一個方法。若是new的話,就會在堆中建立的對象不等。能夠用一個靜態方法獲取一個實體,而獲取的這個實體應該是一個靜態static的變量,這樣的話,就能夠實現上面的要求了。構造函數要寫成私有的,防止用new建立實體。上圖的單利cat實例不是在堆中建立的,是在靜態區建立的,只是爲了好對比。測試類 code

class Cat {
	private static Cat cat;

	private Cat() {
	}

	public static Cat getCat() {
		if (cat == null) {
			cat = new Cat();
		}
		return cat;
	}
	
	public static void main(String[] args) {
		Cat cat1 = Cat.getCat();
		Cat cat2 = Cat.getCat();
		System.out.println(cat1 == cat2);

	}
}



寫法有不少種,能夠參考這個:

http://blog.csdn.net/jason0539/article/details

/23297037

我只是寫的簡單經常使用的一個,android開發中用到的volley

就能夠寫一個單利,官網推薦的。以下說明:

相關文章
相關標籤/搜索