其他分享
首页 > 其他分享> > 设计模式-单例模式

设计模式-单例模式

作者:互联网

单例模式

懒汉模式

class LazySingleton {
    //volatile 防止指令重排
    private volatile static LazySingleton lazySingleton;
    //私有化构造方法
    private LazySingleton(){
        //不能防止反射机制创建对象的攻击
        ....................
    }
    //提供公共的实例化方法
    public static LazySingleton getInstanece(){
        if (lazySingleton == null){
            //解决多线程安全问题
            synchronized (LazySingleton.class){
                //双重判断
                if (lazySingleton == null){
                    lazySingleton = new LazySingleton();
                }
            }
        }
        return lazySingleton;
    }
}

饿汉模式

class HungrySingleton{
    //通过类的加载 创建单个实例
    private static HungrySingleton instance = new HungrySingleton();
    private HungrySingleton(){
        //防止通过反射机制攻击单例模式
        if (instance != null){
            throw new RuntimeException("单例模式不能创建多个实例");
        }
    }
    public static HungrySingleton getInstance(){
        return HungrySingleton.instance;
    }
}

静态内部类

class InnerSingleton {

    private InnerSingleton() {
        //防止通过反射机制创建实例改变单例模式的攻击
        if(InnerSingletonHolder.instance != null){
            throw new RuntimeException("单例模式不能创建多个实例");
        }
    }

    //静态内部类
    private static class InnerSingletonHolder {
        //通过虚拟机类加载的方式保证单例
        private static InnerSingleton instance = new InnerSingleton();
    }

    //只有调用InnerSingleton.getInstance方法的时候才会创建实例(实际也是懒加载的一种方式)
    public static InnerSingleton getInstance() {
        return InnerSingletonHolder.instance;
    }
}

标签:HungrySingleton,private,instance,static,模式,单例,设计模式,InnerSingleton
来源: https://www.cnblogs.com/zhu12/p/14955157.html