2016-09-26 93 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;

所以,我建议你只做那些属性是静态的,这对所有对象都是通用的。如果所有属性都落在该范围内,那么这意味着您只需要一个对象,因为所有对象的行为都是相同的。所以最好拥有一个对象。在这种情况下,请为单件模式创建对象。