1. 程式人生 > >Java與設計模式(04)--單例模式

Java與設計模式(04)--單例模式

單例模式是個非常簡單的設計模式,設計目的就是使得目標類僅能建立一個例項。

需要實現這個設計目標我們需要做如下工作:

  1. 由於只能有一個例項,我們不能暴露預設的public構造方法(不能有任何一個public構造方法,即將預設的構造方法使用private隱藏起來),否則可以用new建立例項;
  2. 由於我們沒有構造方法,我們需要通過一個靜態的getInstance方法獲得一個類的例項;
  3. 具體實現需要考慮到多執行緒的同步問題;

具體程式碼如下:

單例類:

package com.freesoft.designpattern.singleton;

public class Singleton {
	// 儲存唯一一份例項
	private static Singleton instance = null;

	// 隱藏預設構造方法,這樣別人無法通過呼叫new Singleton()來建立物件例項
	private Singleton() {
	}

	// 需要使得方法是同步方法,防止多執行緒同時排程時可能發生的問題
	public static synchronized Singleton getInstance() {
		if (null == instance) {
			instance = new Singleton();
		}
		return instance;
	}
}

測試類:
package com.freesoft.designpattern.singleton;

public class SingletonTest {
	public static void main(String[] args) {
		Singleton singleton = Singleton.getInstance();
		System.out.println(singleton);
		
		// 如果是通過new建立的物件,打印出來的物件地址肯定是不一樣的
		// 這裡一樣說明通過getInstance方法得到的物件是同一個物件
		singleton = Singleton.getInstance();
		System.out.println(singleton);
	}

}