我们可以只为类创建一个Single对象

时间:2011-10-09 12:54:15

标签: java object singleton

是否可以只为该类创建单个对象?如何用Java做到这一点?

6 个答案:

答案 0 :(得分:7)

以下类定义是 Singleton Pattern

public class Singleton {

    private static Singleton instance;

    private Singleton() {}

    public static Singleton getInstance() {
        if (instance == null) {
            instance = new Singleton();
        }
        return instance;
    }
}

检索此类的Singleton对象实例的唯一方法是调用getInstance()方法,以确保始终存在Singleton对象的一个​​实例。< / p>

答案 1 :(得分:3)

正如其他答案所示,Singleton Pattern可以指导您的实施,因此您只创建一个类的单个实例......或者不是。

事实上,许多因素都会发挥作用,特别是如果您在托管环境下工作,例如Java虚拟机之上的应用程序服务器。在这种情况下,集群中可以有多个服务器,每个服务器可以启动多个JVM,每个服务器都可以启动多个类加载器,每个类加载器都创建一个“单例”类的不同的实例。因此,对于给定的类,无法保证对象的单个实例存在!

此外,很多人都认为singletons are evil,你应该仔细考虑是否真的需要使用一个,以及你的环境是否允许它。

答案 2 :(得分:1)

最简单的方法是使用枚举

enum Singleton {
   INSTANCE;
}

该类是延迟加载和线程安全的。

答案 3 :(得分:0)

您应该查看Singleton Pattern

如果您可以提供有关语言的详细信息,那么很容易提供示例。

答案 4 :(得分:0)

取决于。通常只创建一个类的一个对象气味的Singleton模式。

要么不创建任何对象,只使用类变量和方法,要么使用代理方法。

类似的东西:

public static Object getInstance(){
  if(self.instance == null) {
    self.instance = new Object();
  }
  return self.instance;
}

您只需调用getIntstance();

,而不是在客户端代码中调用新的Object()

答案 5 :(得分:0)

如果您正在询问如何实施Singleton模式,我最近发现了一篇优秀文章Implementing Singleton in C#,该文章提供了代码示例并涵盖了一些潜在问题。