关于单身设计模式

dgh*_*htr 4 java singleton design-patterns

我正在探索单身设计模式,我开发了一个类......

public class SingletonObject {
  private static SingletonObject ref;       
  private SingletonObject () { //private constructor
  }     
  public static synchronized SingletonObject getSingletonObject() {
    if (ref == null)
      ref = new SingletonObject();
    return ref;
  } 

  public Object clone() throws CloneNotSupportedException {
    throw new CloneNotSupportedException ();
  }
}
Run Code Online (Sandbox Code Playgroud)

但同步是非常昂贵的,所以我转向热切创建的实例的新设计而不是懒惰创建的实例.

public class Singleton {
  private static Singleton uniqueInstance = new Singleton();
  private Singleton() {
  }
  public static Singleton getInstance() {
    return uniqueInstance;
  }
}
Run Code Online (Sandbox Code Playgroud)

但请告诉我第二个设计如何优于以前的设计.. !!

Ami*_*ani 5

Josh Bloch建议使用枚举:

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

有关解释,请参阅Google I/O 2008上的Effective Java Reloaded talk.

综上所述:

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