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