1. 程式人生 > >Java設計的單例模式(三種寫法)

Java設計的單例模式(三種寫法)

最近在一些部落格上面看到的單例模式,無一例外都是餓漢和懶漢,這兩個確實是單例模式,但是各有自己的弊端

先上程式碼吧

//餓漢式
class ClassA{
	private static final ClassA instance = new ClassA();
	public static ClassA newInstance(){
		return instance;
	}
	private ClassA(){}
}

//懶漢式
class ClassB{
	private static ClassB instance = null;
	public static synchronized ClassB newInstance(){
		if (instance == null) instance = new ClassB();
		return instance;
	}
	private ClassB(){}
}

不管餓漢式還是懶漢,都有自己的弊端。
一般用到單例模式的物件,都是比較佔用記憶體。餓漢在類載入的時候,就建立了物件,在實際開發中,特別佔用記憶體;懶漢雖然沒有在類載入的時候建立物件,但是效率極低,畢竟有synchronized加鎖,在現在多執行緒的時候,效率自然而然就降低了,下面分享一個兩全其美的辦法
class ClassC{
	private static class Holder{
		static ClassC instance = new ClassC();
	}
	public static ClassC newInstance(){
		return Holder.instance;
	}
	private ClassC(){}
}

這個方法,利用了靜態內部類,這樣,在類載入的時候並不會載入靜態內部類,而且也完美的解決的多執行緒併發的問題(因為靜態內部類只會在建立一次)。

第一次寫部落格,如果有什麼不對的地方請在回覆指教。