1. 程式人生 > >設計模式:單例模式的三種建立方式及其各自的優缺點

設計模式:單例模式的三種建立方式及其各自的優缺點

單例模式:確保一個類只有一個例項,並提供全域性訪問點。在Java中實現單例模式需要私有的構造器,一個靜態方法和一個靜態變數。確定在效能和資源上的限制,如何選擇適當的方案來實現單例,以解決多執行緒的問題。如果使用多個類載入器,可能導致單例失效產生多個例項。雙重檢查加鎖不適用於1.4及更早版本的java

方式1:

package singleton;
/**
 * 同步getInstance()方法:
 * 有點:保證執行緒安全。
 * 缺點:效能大大下降
 * @author Arvon
 *
 */
public class Singleton1 {
	private static Singleton1 instance;
	private Singleton1(){}
	public static synchronized Singleton1 getInstance(){
		if(instance==null)
				instance = new Singleton1();
		return instance;
	}
}


方式2:

package singleton;
/**
 * “急切”建立例項
 * 優點:執行緒安全
 * 缺點: 增加程式建立和執行時的負擔
 * @author Arvon
 *
 */
public class Singleton2 {
	private static Singleton2 instance = new Singleton2();
	private Singleton2(){}
	public static  Singleton2 getInstance(){
		return instance;
	}
}


方式3:

package singleton;
/**
 * 雙重檢查加鎖
 * @author Administrator
 *
 */
public class Singleton3 {
	private volatile static Singleton3 instance;
	private Singleton3(){}
	public static  Singleton3 getInstance(){
		if(instance==null)
			synchronized (Singleton3.class) {  //只第一次進入同步塊
				if(instance==null)instance = new Singleton3();
			}
		return instance;
	}
}