2016-09-26 54 views
1

我對java不是很熟悉。我創建了一個球衣網站服務器。有不同的功能,如startRodio()stopRadio(),setRadioIp() ...我創建了一個RequestHandler類來處理http請求和一個其他Radio類來實現它們。 Radio類的所有屬性和方法都是靜態的。它看起來像在java中使用靜態類時

無線電

class Radio{ 

public static boolean radionOn; 
public static String radioIpadress; 


public static boolean startRadio(){ 
radioOn = true; 
// some other operation 
} 
... 

RequestHandler

classe RequestHandler { 

@path(/startRodio) 
..... 
if (!Rodio.radioOn) 
Radio.startRadio(); 

是它爲我PROGRAMM一個很好的架構?以這種方式使所有的屬性和方法是靜態的是一個好習慣嗎?

+0

你所說的「靜態類」與「靜態類」(嵌套類)無關,因爲你的意思是靜態類字段而不是類。儘可能避免靜態字段(除常量外,它們會導致不必要的麻煩)。 – maaartinus

回答

0

說話簡單:不要用static

靜態是一個異常在良好的面向對象設計。它會導致你的類之間的直接耦合。這使得以後很難取代「實施」;這使得編寫合理的單元測試變得很困難。

含義:默認情況下,您不使用靜態。有些情況下可以使用;但是您展示的示例代碼看起來完全不像您應該使用靜態

相反,您應該定義一個接口,它表示您的收音機的功能;允許該接口背後的不同實現。

1

我會說,如上所述使默認屬性成爲靜態屬性並不是很好的做法。

如果您只有Radio is這樣的對象的一個​​實例,那麼使用singleton pattern以及私有屬性和適當的getter和setter。這通常是最好的方法,因爲您將公共接口與私有實現分開,並且實現中的更改(例如,重命名變量)會在應用程序的其他部分和需要重構時導致問題。

靜態變量只能用於定義類型/類的一些常見屬性。例如,您可以計算靜態變量中類的現有實例。

1

更好地避免使用靜態變量。這不是一個好習慣。靜態變量具有全局範圍,這會讓您很難進行測試。另外任何東西都可以修改靜態變量。更多的是,使用靜態不是線程安全的。你也無法控制靜態變量,因爲它們的創建和銷燬條件。所以不建議使用靜力學。

1
  1. 只是不要使用static變量。它直接結合你的課程中的幾個 。
  2. 如果您確定 只需要一個對象,則可以使用單例代替靜態。
0

這取決於你在找什麼。

比方說你正在創建4個收音機對象。 radioOne ....,radioFour ...

現在,如果您希望所有收音機在同一時間啓動,您應該使用靜態變量,因爲靜態屬性是類的所有對象的特性。它們不是對任何特定對象的排他性,並且在實踐中應該使用類來評估它們:

Radio.radionOn = true;

而不是radioOne.radioOn = true;

所以,我建議你只做那些屬性是靜態的,這對所有對象都是通用的。如果所有屬性都落在該範圍內,那麼這意味着您只需要一個對象,因爲所有對象的行爲都是相同的。所以最好擁有一個對象。在這種情況下,請爲單件模式創建對象。