在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吗?
答案 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() { ... }
}