Design Pattern

Design Pattern Singleton Pattern(單例模式)

Singleton Pattern(單例模式)

可以保證這一個類只有一個實例,並且該類提供了全域訪問,該Singleton類可以自己產生實體,也可以通過工廠類獲得物件

好處

只需要物件的一個全域實例,無論是直接使用它還是簡單地將它傳遞給另一個類這樣的例子很多,包括OkHttpClient,HttpLoggingInterceptor,Retrofit,Gson,SharedPreferences等

如果我們把這些類產生實體了多個物件,就會遇到許多問題,比如異常的APP反應,資源過度使用和其他混亂的結果

程式範例

建立 Singleton 的設計模式有幾個要注意的地方

1.須將建構子設為 private,以確保此類別皆是透過自訂的方法建立實體

2.需自定一個static的方法,通常取名為newInstance或者是getInstance,並在其中判斷此類別之物件實體是否已被建立過

3.需宣告一個static參數,用來儲存此類別本身之物件實體

public class SingleTon {
    //儲存唯一的物件實體
    private static SingleTon instance;

    //建構子設成 private
    private SingleTon() {
    }

    //自訂getInstance方法
    public static synchronized SingleTon getInstance() {
        //檢查物件實體是否建立過
        if (instance == null) {
            //未建立則呼叫建構子建立
            instance = new SingleTon();
        }
        return instance;
    }
}

最建議的用法

public class SingleTon {
    //在編譯時期就new出Singleton物件
    private static SingleTon instance = new SingleTon();

    //建構子設成 private
    private SingleTon() {}

    //自訂getInstance方法
    public static SingleTon getInstance() {
        return instance;
    }
}

發表迴響