具有单例设计模式的示例类。
class Singleton {
private static Singleton instance;
private int x;
private Singleton() {
x = 5;
}
public static synchronized Singleton getInstance() {
if(instance == null) {
instance = new Singleton();
}
return instance;
}
public void doSomething() {
System.out.println("Hello");
}
}
我只是想知道我可以使用声明为static的相同变量和方法创建此类。和单身人士一样吗?
答案 0 :(得分:0)
Singleton :
是的,它是一样的。
答案 1 :(得分:0)
如果你真的需要实现singelton模式,我建议使用枚举:
public enum MySingelton{
INSTANCE;
private final String[] variable = new String[]{"test", "test2};
public void randomFunction(){
}
}
用以下方式调用:
MySingelton.INSTANCE.randomFunction();
通过枚举实现,它可以保证只创建一个实例,并且它始终可用。此外,还可以对singelton进行序列化和反序列化,而无需创建多个副本。
可在此处找到更多信息:
What is an efficient way to implement a singleton pattern in Java?
http://www.drdobbs.com/jvm/creating-and-destroying-java-objects-par/208403883?pgno=3
答案 2 :(得分:0)
由于单例模式的目的是确保存在类的单个实例,是的,您可以使用静态成员来实现相同的效果。
所以而不是
public class Singleton {
private static Singleton theInstance = new Singleton();
private int aVar = 10;
public void aMethod() {
System.out.println(aVar);
}
public static Singleton getInstance() {
return theInstance;
}
}
你可以做到
public class FakeSingleton {
private static int aVar = 10;
public static void aMethod() {
System.out.println(aVar);
}
}
并具有完全相同的功能(而不是Singleton.getInstance().aMethod()
,您可以编写FakeSingleton.aMethod()
)。
如果您想要延迟初始化,使用单例模式可能是有利的,因此单例只在首次需要时才初始化,如下所示:
public class Singleton {
private static Singleton theInstance = null;
private int aVar = 10;
public void aMethod() {
System.out.println(aVar);
}
public static Singleton getInstance() {
if (theInstance == null) {
theInstance = new Singleton();
}
return theInstance;
}
}
(请注意,上述内容不是线程安全的,在多线程代码中,您需要添加同步。)