我有一个用java实现的经典单例
public class ClassicSingleton {
private static ClassicSingleton instance = null;
private ClassicSingleton() {} ;
public static ClassicSingleton getInstance() {
if (instance == null)
return new ClassicSingleton();
return instance;
}
}
Run Code Online (Sandbox Code Playgroud)
我有以下驱动程序
public class SingletonDriver {
public static void main(String[] args) {
System.out.println(ClassicSingleton.getInstance().toString());
System.out.println(ClassicSingleton.getInstance().toString());
}
}
Run Code Online (Sandbox Code Playgroud)
输出就像是
ClassicSingleton@75e4f66a
ClassicSingleton@aede59e
Run Code Online (Sandbox Code Playgroud)
我以为输出会指向同一个对象.这些值不应该相同吗?
你忘了分配new ClassicSingleton()到instance,所以你确实有一个工厂,而不是一个单; 你将在每次通话时创建一个新实例.(当然,请注意,这不是线程安全的.)
你的实施getInstance()是错误的.您永远不会初始化instance,因此会在每次调用时返回一个新实例.如果instance是null,您应该将其保存到您的数据成员,然后才返回它:
public static ClassicSingleton getInstance() {
if (instance == null)
instance = new ClassicSingleton();
return instance;
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
200 次 |
| 最近记录: |