[英]Singleton or static class?
我有以下課程:
public class EnteredValues {
private HashMap<String, String> mEnteredValues;
public boolean change = false;
public boolean submit = false;
private static final EnteredValues instance = new EnteredValues();
// Singleton
private EnteredValues() {
mEnteredValues = new HashMap<String, String>();
}
public static EnteredValues getInstance() {
return instance;
}
public void addValue(String id, String value) {
if (mEnteredValues.put(id, value) != null) {
// A change has happened
change = true;
}
}
public String getValueForIdentifier(String identifier) {
return mEnteredValues.get(identifier);
}
public HashMap<String, String> getEnteredValues() {
return mEnteredValues;
}
public void clean() {
mEnteredValues.clear();
change = false;
submit = false;
}
}
該類用於管理用戶已經輸入的值,並且該類應可供應用程序中的所有類訪問。
當活動發生變化時,我通過調用clear方法來“重置”單例。
我選擇單例模式時並沒有真正考慮靜態類的選項。
但是現在我想知道是否不應該只使用靜態類。
處理只管理值的類的常用方法是什么? 靜態類作為單例更快嗎?
謝謝
您提供一種清晰的方法來重置Singleton狀態的事實表明,您不應使用Singleton。 由於國家是全球性的,因此這是冒險行為。 這也意味着單元測試將是一個很大的痛苦。
還有一件事。 永遠不要將實例變量聲明為公共變量。 將它們聲明為私有或受保護的,並提供獲取器和設置器。 同樣,也不需要使用默認值初始化實例變量。
靜態類和單例模式之間的主要區別在於,如果您需要實現接口等,則可以使用單例。 對於這種特殊情況,我認為使用靜態類可能會更好,因為您沒有實現任何接口。 關於您的問題是否可以更快地解決,我想說兩者之間的差異可以忽略不計,但是使用靜態類將減少類的動態實例化的少量開銷。
如果需要這樣的設計,使用單例有什么不好? 如果您只需要某個對象的一個實例來進行指定的操作,那么單例無疑是不錯的選擇。
閱讀http://docs.oracle.com/javase/tutorial/java/javaOO/nested.html
從那里:
注意:靜態嵌套類與它的外部類(和其他類)的實例成員進行交互,就像其他任何頂級類一樣。 實際上,靜態嵌套類在行為上是頂級類,為了包裝方便,該頂級類已嵌套在另一個頂級類中。
只為風格
如果不需要,我寧願不依賴Singleton。 為什么? 凝聚力較小。 如果是可以從外部設置的屬性,則可以使用單元測試來測試“活動”(或其他任何內容)。 如果願意,您可以改變主意以使用不同的實例,依此類推。
我謙虛的建議是在每個Activity中都有一個屬性(也許您可以定義一個公共基類?),並使用新的新實例將其設置為Activity初始化。
您的代碼對如何獲取它一無所知(初始化代碼除外,也許您將來可以更改它)。
但是正如我所說的...只是一個口味問題! :)
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.