是否可以只为该类创建单个对象?如何用Java做到这一点?
答案 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#,该文章提供了代码示例并涵盖了一些潜在问题。