为什么单独使用singleton对象而不是public

时间:2015-12-21 16:17:07

标签: java design-patterns

在Java中,你可以创建一个像这样的单例:

public class SingleObject {

   //create an object of SingleObject
   private static SingleObject instance = new SingleObject();

   //make the constructor private so that this class cannot be
   //instantiated
   private SingleObject(){}

   //Get the only object available
   public static SingleObject getInstance(){
      return instance;
   }
}

你有什么理由不公开实例并免除getInstance吗?

2 个答案:

答案 0 :(得分:3)

现代(自Java 1.5以来我认为)在Java中创建单例的规范方法,从this answer无耻地复制,具有更多背景和更大的示例,这就是替换你问题中的代码:

public enum SingleObject {
    INSTANCE;
}

直接回答你的问题:你提出了一个错误的问题,答案是,它不应该是你提供的替代方案。

答案 1 :(得分:1)

Effective Java中,Joshua Bloch说静态工厂方法优于public final字段:

  

工厂方法方法的一个优点是它为您提供了灵活性   改变你的想法,关于班级是否应该是没有的单身人士   改变其API。工厂方法返回唯一的实例,但很容易   修改为返回,例如,为每个调用它的线程返回一个唯一的实例。

他还说:

  

关于泛型类型的第二个优点在第27项中讨论。通常,这些优点都不相关,并且最终场方法更简单。

否则在Java中他写道“单元素枚举类型是实现单例的最佳方式”

// Enum singleton - the preferred approach
public enum Elvis {
    INSTANCE;
    public void leaveTheBuilding() { ... }
}