2013-10-21 40 views
-2

在Java中使用什么更好:单身人士或拥有所有静态成员的班级?或者没有关系?所有静态成员的单身人士或班级

例如,我想访问来自不同类的X类,但X类必须包含所有使用它的类的相似值。

+0

Java是一种面向对象的编程语言。 –

+0

不,您的要求根本不明确。更好的是什么意思?出于什么目的? –

+0

您提出的问题不完整。你需要获得更多的理论知识来决定单例还是静态方法更好。研究模式设计以获得更好。没有任何答案对您的问题足够好。 –

回答

0

全静态类通常用于共享实用程序方法,这些共享实用程序方法在逻辑上组合在一起,但不共享它们之间的状态(字段)。

单身是更好,如果:

  1. 你可能想用不同的行为不同的对象来发挥这种作用。
  2. 对象需要实现一个接口(如共享ActionListener

(说这句话的另一种方法:如果你需要多态,你的单身必须是一个对象,而不是一类)

1

对于我:Singleton is an anti-pattern,只应该使用,如果有一个强有力的理由,还有一个类只有公共静态变量是不可接受的在我看来,这个声音不是真正的对象对我来说。您可以使用Dependency Injection,好处是可测试性,并且您可以避免重新创建单例(如果您不使用enum)。

这看起来像:

public class SharedObject{ 
// content 
} 


public class Worker{ 
private final SharedObject sharedObject; 
public Worker(SharedObject sharedObject){ 
this.sharedObject = sharedObject; 
} 
} 

用这种方式,你也看到,这里的物品从何而来,你可以使用Mocktio easyly嘲笑共享对象。它迫使你构造你的代码以进行简单的测试,同时它将以更模块化的方向发展。

2

有些情况下,静态类比单例更有意义。你可以看到java.lang.Math的例子。这不是单身 - 。它只是为我们提供了一堆静态方法。

如果您的类没有维护任何状态,并且只提供对某些方法的全局访问,那么您应该使用静态类,因为静态方法比编译时的静态绑定更快。请记住,不能对静态方法使用多态,因为静态方法不能被覆盖。

如果要维护对象的状态,则必须使用单例而不是静态方法。当您需要具有完整OO功能的类时,选择Singleton,而如果您只需要存储一堆静态方法一起使用,比使用静态类。

你可以有一个详细的描述在这里 了解更多:http://javarevisited.blogspot.com/2013/03/difference-between-singleton-pattern-vs-static-class-java.html#ixzz2iNE3rW4i

1

我喜欢静态的方法对它们是无状态类,就像MathSystem类和单为副versa->为有状态类,像FacesContext

0

优选的不可遗传的不可实例化的类具有静态方法。例如:只有当你想保持一些状态,类似于应用范围

public final class Constants { 

    private Constants() { 
     // non-public constructor 
    } 

    public static final Pattern ID_PATTERN = Pattern.compile("^\\d{4,10}$"); 

    public static final Locale DEFAULT_LOCALE = new Locale("en", "US"); 

    ... 

} 

使用单。但是,如果您想要一个干净设计,则必须是两个类。