設計模式之單例模式

  1. 基本概念
    單例模式指的是:對於某一個類,整個程序中值存在一個該類的實例對象。常見的比如數據庫連接對象等。

  2. 代碼示例,單例模式的幾種寫法及優劣

/**
 * 餓漢式寫法,多線程下不能保證對象的確定性
**/
public class SingletonHungryUnsec {
    private static SingletonHungryUnsec instance;

    private SingletonHungryUnsec() {
    }

    /**
     * 餓漢式,且線程不安全
     * @return instancce
     */
    public static SingletonHungryUnsec getInstance (){
        if (null == instance) {
            instance = new SingletonHungryUnsec();
        }
        return instance;
    }
}
實際操作時,不推薦這樣的寫法。
public class SingletonHungrySec {
    private static SingletonHungrySec instance;
        private SingletonHungrySec() {
    }

   /***
         * 餓漢式,線程安全型
         * @return instance
         */
        public static SingletonHungrySec getInstance () {
            if (null == instance) {
                synchronized (SingletonHungrySec.class) {
                    if (null == instance) {
                        instance = new SingletonHungrySec();
                    }
                }
            }
            return instance;
        }
}

以上這種寫法,通過synchronized關鍵字,在創建實例對象時,進行雙重校驗,確保了對象的唯一性。
當然,也可以在方法的定義上加synchrozied關鍵字,只是多了不必要的同步,每次getInstance()時,都需要加鎖解鎖操作。

public class SingletonFull {
    private static final SingletonFull instance = new SingletonFull();

    private SingletonFull() {
    }

    public static SingletonFull getInstance (){
        return instance;
    }

}

上面這樣的寫法是飽漢式,即在聲明屬性的時候已經創建了實例對象,後續程序中只需要調用獲取即可,但是這種方式並沒有達到lazy loader的效果。

發佈了28 篇原創文章 · 獲贊 1 · 訪問量 8883
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章