我只是在某处阅读以下代码:
public class SingletonObjectDemo {
private static SingletonObjectDemo singletonObject;
// Note that the constructor is private
private SingletonObjectDemo() {
// Optional Code
}
public static SingletonObjectDemo getSingletonObject() {
if (singletonObject == null) {
singletonObject = new SingletonObjectDemo();
}
return singletonObject;
}
}
我需要知道这部分的需要:
if (singletonObject == null) {
singletonObject = new SingletonObjectDemo();
}
如果我们不使用这部分代码怎么办?仍然会有
SingletonObjectDemo
的单个副本,那么为什么我们需要此代码? 最佳答案
此类具有一个SingletonObjectDemo singletonObject
字段,用于保存单例实例。现在有两种可能的策略-
1-您确实希望通过声明来初始化对象-
private static SingletonObjectDemo singletonObject = new SingletonObjectDemo();
这将导致您的单例对象在类加载时被初始化。这种策略的缺点是,如果您有很多单例,那么即使它们不再需要,它们也会全部初始化并占用内存。
2-您可以对对象进行延迟初始化,即在首次调用
getSingletonObject()
时对其进行初始化-// note that this initializes the object to null by default
private static SingletonObjectDemo singletonObject;
...
if (singletonObject == null) {
singletonObject = new SingletonObjectDemo();
}
这样可以节省您的内存,直到真正需要单例为止。这种策略的缺点是方法的第一次调用可能会看到响应时间稍差,因为在返回对象之前必须初始化对象。