茴香豆的九種寫法,論java的各種單例模式
阿新 • • 發佈:2019-04-30
懶漢式
public class LazySingleton {
private static LazySingleton singleton;
private LazySingleton() {}
public synchronized LazySingleton getInstance() {
if (singleton == null) {
singleton = new LazySingleton();
}
return singleton;
}
}
餓漢式
public class HungarySingleton { private static HungarySingleton singleton = new HungarySingleton(); private HungarySingleton(){} public static HungarySingleton getInstance(){ return singleton; } }
雙重檢查鎖
public class DoubleCheckSingleton { private static volatile DoubleCheckSingleton singleton; private DoubleCheckSingleton() {} public static DoubleCheckSingleton getSingleton() { if (singleton != null) { return singleton; } else { synchronized (DoubleCheckSingleton.class) { if (singleton == null) { singleton = new DoubleCheckSingleton(); } return singleton; } } } }
使用靜態內部類
public class StaticInnerClassSingleton { private StaticInnerClassSingleton(){} private static class StaticInnerClass{ private static StaticInnerClassSingleton singleton = new StaticInnerClassSingleton(); } public StaticInnerClassSingleton getInstance(){ return StaticInnerClass.singleton; } }
使用列舉
public class EnumSingleton {
private enum Singleton{
INSTANCE;
EnumSingleton enumSingleton;
Singleton(){
synchronized (this){
enumSingleton = new EnumSingleton();
}
}
}
public EnumSingleton getInstance(){
return Singleton.INSTANCE.enumSingleto