2017-05-23 90 views
2

如果我知道一個特定的類只會在我的程序中實例化一次,那麼最好是使用靜態方法和變量來代替那個特定的類嗎?如果不是,如果只有一個該類的實例,那麼使用實例方法和變量優於靜態方法會帶來什麼好處?Java - 只有一個類的實例:使用靜態方法?

+1

你*可以*使它成爲'enum'。但爲什麼**限制自己?如果你需要兩個實例,或者三個呢? –

+1

如果你真的知道它會是一個實例,那麼你應該使用(Singleton)模式 –

+0

這個問題可能是有用的:https://stackoverflow.com/questions/519520/difference-between-static-class-and-singleton- pattern?noredirect = 1&lq = 1 –

回答

3

我們來討論何時使用singletonstatic方法。前面已經討論過這個網站,所以我在這個答案的結尾處指出了這一點。

查看此問題的一種方法是詢問該類是否具有狀態,是否需要進行子類化,如何進行測試,將該單例應用於依賴注入框架中,即將其注入?

如果你的回答是「yes」對任何上述,你最好使用singleton - 如果不是,那麼你可以使用static方法。

但是,這兩種方法在下面的鏈接中將更詳細地討論它們應該或不應該使用的原因。

請參閱this「爲什麼單身人士不好」。

請參閱this「不使用靜態方法時」。

+0

埃裏克Galluzzo對你連接的第二個問題的答案是太棒了。 –

4

這取決於你需要班級做什麼以及將來可能需要什麼。這也取決於有多少人會看到或使用此代碼。如果這個代碼只會被你看到和使用,比選擇一個實現並且一直跟隨它,那麼迫使你自己切換到另一個實現,因爲練習可能是照亮的。

假設你的代碼會被看到或另一個程序員使用:

如果對象是,你需要在測試中模仿(如數據庫連接,例如)的東西,然後它會是最好能有你的方法是實例方法,並找到一些其他的策略來確保你只有一個。 (例如,你的類將你的程序的輸出寫入excel文件),然後將你的類的實例傳遞給任何需要它們的方法一個很好的方法可以幫助你的代碼更加靈活(例如,如果你以後決定要生成html輸出,你所要做的就是編寫一個你的excel編寫器的姊妹實現,然後通過它)。

如果您幾乎100%確定您的代碼永遠不需要被模仿(又名「模擬」),並且您永遠不需要利用多態性(例如Java中的Math類),那麼靜態方法將可能會很好,但這是一個罕見的情況。

相關問題