單例模式

懶漢式雙重鎖定

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;
    }
}

 

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章