实现单例设计模式的标准方法如下:
public class Singleton {
private static Singleton instance = new Singleton();
public static Singleton getInstance() {
return instance;
}
private Singleton() {}
}我想知道您是否也可以这样实现它:
public class Singleton {
private Singleton() {}
public final static Singleton INSTANCE = new Singleton();
}如果是的话,哪个版本更好?
发布于 2013-08-13 04:58:00
都不是。在这两种情况下,受信任的使用者都可以通过反射调用私有构造函数。另一个问题是,除非采取额外的步骤,否则这些实现不能很好地处理序列化(默认情况下,如果采用天真的方法,每次反序列化Singleton时,它都会创建一个新实例)。
正确的解决方案是使用定义单个值的enum。
public enum Singleton {
INSTANCE;
// methods
}来自有效的Java:
虽然这种方法尚未被广泛采用,但单元素枚举类型是实现单例的最佳方法。
发布于 2013-08-13 04:59:40
你为什么不使用枚举来实现Singleton?
public enum SingletonEnum {
Instance;
private static String testStr = "";
public static void setTestStr(String newTestStr) {
testStr = newTestStr;
}
public static String getTestStr() {
return testStr;
}
public static String sayHello(String name) {
return "Hello " + name;
}
}发布于 2013-08-13 04:56:27
在我看来,第一个更好,因为它看起来更符合面向对象的方法。
https://stackoverflow.com/questions/18200923
复制相似问题