Java設計模式之——單例模式

單例模式解決的問題:保證一個類在內存中的對象唯一性。

如何保證對象唯一性?
答:1、爲了避免其他程序多次建立該類對象,不允許其他程序用new創建該類對象。
2、爲了讓其它程序可以訪問到該類對象,在該類創建一個本類實例。
3、爲了方便其它程序對自定義對象的訪問,對外提供一個方法讓其他程序可以獲取該對象。

步驟:
1、用private私有化該類構造函數。
2、通過new在本類中創建一個本類對象。
3、定義一個共有的方法,將創建的對象返回。

餓漢式:
Singleton類一進內存,就已經創建好了對象(由於單例模式就是爲了獲取對象,安全且簡單,故開發時比較常用)。

class Singleton {
    private Singleton() {  //
    }
    private static Singleton s = new Singleton();
    public static Singleton getInstance() {
        return s;
    }
}

class SingleDemo {
    public static void main(String[]) {
        Singleton s1 = Singleton.getInstance();
        Singleton s2 = Singleton.getInstance();
        System.out.println(s1==s2);
    }
}

懶漢式:
Singleton類進內存,對象還沒有存在,只有調用了getInstance方法時,才建立對象(又稱爲延時加載,開發時幾乎不用)。
懶漢式的弊端:在多個對象同時調用getInstance方法時,需要加鎖,故效率不高。

class Singleton {
    private Singleton() {  
    }
    private static Singleton s = null;
    public static Singleton getInstance() {
        if(s == null) {  //第一次爲null;之後不爲null,不會執行
            synchronized(Singleton.class) {
                if(s == null) { //二次判斷
                    s = new Singleton();  //實例化一個Singleton對象,之後不再實例化
                }
            }
            return s;
        }
    }
}

class SingleDemo {
    public static void main(String[]) {
        Singleton s1 = Singleton.getInstance();
        Singleton s2 = Singleton.getInstance();
        System.out.println(s1==s2);
    }
}
發佈了37 篇原創文章 · 獲贊 1 · 訪問量 1萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章