設計模式:單例模式的三種創建方式及其各自的優缺點
阿新 • • 發佈:2017-05-30
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; } }
設計模式:單例模式的三種創建方式及其各自的優缺點