创建单例对象,最好的方法

Har*_*rke -2 java singleton

我想创建一个单例对象,我找到了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)

Rah*_*thi 7

您可以尝试使用这样的枚举: -

public enum Foo
{
   INSTANCE;
}
Run Code Online (Sandbox Code Playgroud)

另请查看相关答案: - 在Java中实现单例模式的有效方法是什么?

使用私有构造函数强制Singleton属性或者 Stephen Denne在上面的答案中使用的枚举类型引用几行: -

这种方法在功能上等同于公共字段方法,除了它更简洁,免费提供序列化机制,并提供防止多实例化的铁定保证,即使面对复杂的序列化或反射攻击.虽然这种方法尚未被广泛采用,但单元素枚举类型是实现单例的最佳方法.