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

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

singleton dmi 創建 檢查 public pos return style tin

單例模式: 確保一個類僅僅有一個實例,並提供全局訪問點。在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;
	}
}


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