我想创建一个单例对象,我找到了3种方法,其中一种更好,为什么其他方式不好.假定构造函数是私有的.
方法1:
class ClassX{
private static ClassX objX = null;
static{
objX = new ClassX();
}
//get objX method
}
Run Code Online (Sandbox Code Playgroud)
方法2:
class ClassX{
private static ClassX objX = new ClassX();
//get objX method
}
Run Code Online (Sandbox Code Playgroud)
方法3:
class ClassX{
private static ClassX objX = null;
public ClassX getInstance(){
if(objX == null)
return new ClassX();
else
return objX;
}
}
Run Code Online (Sandbox Code Playgroud)
您可以尝试使用这样的枚举: -
public enum Foo
{
INSTANCE;
}
Run Code Online (Sandbox Code Playgroud)
另请查看相关答案: - 在Java中实现单例模式的有效方法是什么?
从使用私有构造函数强制Singleton属性或者 Stephen Denne在上面的答案中使用的枚举类型引用几行: -
这种方法在功能上等同于公共字段方法,除了它更简洁,免费提供序列化机制,并提供防止多实例化的铁定保证,即使面对复杂的序列化或反射攻击.虽然这种方法尚未被广泛采用,但单元素枚举类型是实现单例的最佳方法.