单例模式

主宰稳场 提交于 2019-12-10 16:44:19

懒汉式双重锁定

public class Singleton {

    private volatile static Singleton singleton;//第一步检查

    public static Singleton getInstance() {
        if (singleton == null) {//第二步检查
            synchronized (Singleton.class) {
                if (singleton == null) {
                    singleton = new Singleton();
                }
            }
        }
        return singleton;
    }
}

饿汉式(先创建出实例)

class Singleton{
    //静态实例
    private static Singleton singleton = new Singleton();

    //构造函数
    private Singleton(){};

    public Singleton getInstance(){
        return singleton;
    }
}

枚举

enum Singleton{
    INSTANCE;  //枚举成员

    private Singleton singleton;

    private Singleton{
        singleton = new Singleton();
    }

    public Singleton getInstance(){
        return singleton;
    }
}

//获得实例:Singleton.INSTANCE.getInstance();

静态内部类

class Singleton{
    //静态内部类
    private static calss SingletonHolder{
        private static final Singleton singleton = new Singleton();
    }

    //构造函数
    private Singleton(){};

    public static final Singleton getInstance(){
        return SingletonHolder.singleton;
    }
}

静态代码块

class Singleton{
    //静态变量
    private static Singleton singleton = null;

    //构造函数
    private Singleton(){};

    //静态代码块
    static{
        singleton = new Singleton();
    }

    public Singleton getInstance(){
        return singleton;
    }
}

 

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!