2011-03-22 48 views
1

如果十個類從基類繼承,並且所有十個子類都需要訪問單例,那麼應該如何傳遞對該單例的引用。我看到的要對此幾種方式,兩個這樣的幸福:如何將單例引用傳遞給十個同級對象

  1. 調用超類的靜態方法,設置然後可以通過子類共享的靜態對象的引用

  2. 傳遞一個將單例引用到每個子類作爲其構造函數中的一個參數。每個子類可以存儲對單例對象的引用,或者將其傳遞給超類構造器。

但我不知道什麼是首選的方式,或者如果我失去了明顯的東西。提前致謝。

回答

2

選項1提供減少代碼中的噪音和重複。

+0

這就是我的想法,但我總是懷疑是否有更聰明的方法 – 2011-03-22 02:57:22

1

這個怎麼樣在基類中創建單個實例:

static final MySingleton mySingleton = new MySingleton(); 

mySingleton然後在所有的繼承類自動可用。

編輯:按您的評論:

你可以在基類的靜態引用(如果它不需要通過運行參數)這樣的:

static final MySingleton mySingleton; 
static { 
    SomeClass so = new SomeClass(123, "abc"); 
    mySingleton = so.getMySingleton(); 
} 
+0

在程序中,單例需要存在於這個特定的對象族之外。不過謝謝。 – 2011-03-22 02:50:24

+1

我增加了另一種方法,請參閱編輯部分,它與您的選項#1非常相似。 – anubhava 2011-03-22 03:02:20

6

爲什麼不在你的單例類中使用getInstance()方法?你不需要傳遞它。每當你需要它時,使用靜態getInstance()方法。

相關問題