1. 程式人生 > >java單例模式中餓漢式與懶漢式區別

java單例模式中餓漢式與懶漢式區別

餓漢式:

設計思想:構造方法私有,這樣就保證了在外部是無法例項化物件的;然後先在內部定義一個靜態常量物件,再寫一個static方法來返回這個物件,這樣就保證是一個物件了。

程式碼實現

public class HungryManSingleton {
	/**
	 * 構造方法私有
	 */
	private HungryManSingleton() {
		// TODO Auto-generated constructor stub
	}
	
	/**
	 *餓漢式單例實現 
	 */
	private static final HungryManSingleton hungryMan = new HungryManSingleton();
	
	/**
	 * 獲取例項
	 */
	public static HungryManSingleton getInstance() {
		return hungryMan;
	}
}


懶漢式:

程式碼實現

public class LazySingleton {
	
	private LazySingleton() {
		// TODO Auto-generated constructor stub
	}
	
	private static LazySingleton lazySingleton;
	
	public synchronized static LazySingleton getInstance() {
		if (lazySingleton == null) {
			System.out.println("第一次呼叫的例項化。");
			lazySingleton = new LazySingleton();
		}
		return lazySingleton;
	}
}
區別 :餓漢式是先定義例項的 而懶漢式是先定義引用,當懶漢式第一次呼叫getInstance的時候 進行物件例項化操作;當然這裡考慮到多併發的情況,多個執行緒同時呼叫這個方法的時候,會出現問題,所以加上同步鎖 synchronized 來保證同一時刻只有一個執行緒進入方法。