【Java之路】设计模式之单例模式的六种实现

单例模式

懒汉式——线程不安全

public class Singleton {
    private static Singleton uniqueInstance;

    private Singleton() {
    }

    public static Singleton getUniqueInstance() {
        if(uniqueInstance == null) {
            uniqueInstance = new Singleton();
            return uniqueInstance;
        }
    }
}

饿汉式——线程安全

public class Singleton {
    private static Singleton uniqueInstance = new Singleton();;

    private Singleton() {
    }

    public static Singleton getUniqueInstance() {
        return uniqueInstance;
    }
}

懒汉式——线程安全

public class Singleton {
    private static Singleton uniqueInstance;

    private Singleton() {
    }

    public static synchronized Singleton getUniqueInstance() {
        if(uniqueInstance == null) {
            uniqueInstance = new Singleton();
            return uniqueInstance;
        }
    }
}

双重校验锁——线程安全

public class Singleton {
    private volatile static Singleton uniqueInstance;

    private Singleton() {
    }

    public static Singleton getUniqueInstance() {
        if(uniqueInstance == null) {
            synchronized(Singleton.class) {
                if(uniqueInstance == null) {
                    uniqueInstance = new Singleton();
                    return uniqueInstance;
                }
            }
        }
    }
}

静态内部类实现——线程安全

public class Singleton {
    private Singleton() {
    }

    private static SingletonHolder {
        private static final Singleton INSTANCE = new Singleton();
    }

    public static Singleton getUniqueInstance() {
        return SingletonHolder.INSTANCE;
    }
}

枚举实现——防止反射攻击

public enum Singleton {
    INSTANCE;
    private String objName;

    public void setObjName(String objName) {
        this.objName = objName;
    }

    public Object getObj() {
        return objName;
    }
}
posted @ 2020-04-17 14:14  アカツキ  阅读(107)  评论(0编辑  收藏  举报