單例模式的實現:
1, 普通模式:
public class singledemo
public singledemo getinstance()
return instance;
}}
以上模式為懶漢模式
可以改造為飢餓模式,即class載入即new物件
public class singledemo
public singledemo getinstance()
}
上述方法可以可以通過反射,突破單例模式。
可以使用 enum方式實現
public enum singledemoenum
}
列舉實現單例模式
已經有了雙重判斷加鎖的單例模式,為什麼還要用列舉實現單例模式?列舉的單例模式可以避免反射破壞封裝 先來觀察反射實現的單例 public class reflectdemo 列舉實現單例 這是發現通過列舉可以實現單例模式 若乙個類宣告為列舉類就預設這個類繼承了enum,同時繼承了父類的構造方法。若此時...
列舉類實現單例模式
實現單例模式時候,要思考四個問題 是否執行緒安全 多執行緒安全了,效率是否能接受 是否可以延遲載入 是否支援序列化 請看下面一張圖 列舉實現單例模式如下 簡潔優雅 public enum singleton 0 public void setanint int anint public void d...
單例模式之列舉單例
列舉也是餓漢式。列舉單例 問題1 列舉單例是如何限制例項個數的 反編譯後可以看到 就是我們列舉類的乙個靜態成員變數而已,單例項的 問題2 列舉單例在建立時是否有併發問題 沒有,因為它也是靜態成員變數,它的執行緒安全性也是在類載入階段完成的。那個時候不會有執行緒併發問題 問題3 列舉單例能否被反射破壞...