五种单例模式

    xiaoxiao2021-03-25  161

    1、饿汉式

    public class SingletonHungry { private SingletonHungry () { } private static SingletonHungry singletonHungry = new SingletonHungry(); public static SingletonHungry getInstance(){ return singletonHungry; } }

    2、懒汉式

    public class SingletonLazy { private static SingletonLazy singletonLazy; private SingletonLazy () { /** * 防止被反射强行创建实例 */ if(singletonLazy != null) { throw new UnsupportedOperationException("SingletonLazy was created!"); } } public static SingletonLazy getInstance() { if(singletonLazy == null) { try { singletonLazy = new SingletonLazy(); return singletonLazy; } catch (Exception e) { e.printStackTrace(); } } return singletonLazy; } }

    3、双锁

    public class SingletonLock { private static SingletonLock singletonLock; private SingletonLock() { } public static SingletonLock getInstance() { if(singletonLock == null) { synchronized (SingletonLock.class) { if(singletonLock == null) { singletonLock = new SingletonLock(); return singletonLock; } } } return singletonLock; } }

    4、内部类

    public class SingletonInner { private SingletonInner() { if (Holder.INSTANCE != null) { throw new UnsupportedOperationException("INSTANCE was created!"); } } static class Holder { private static SingletonInner INSTANCE = new SingletonInner(); } public static SingletonInner getInstance() { return Holder.INSTANCE; } }

    5、枚举

    public enum SingletonEnum{ INSTANCE; }
    转载请注明原文地址: https://ju.6miu.com/read-2270.html

    最新回复(0)