单例模式在Java中的实现
最近有人在采访中问我:如何在Java中实现单例设计模式 我有点困惑,因为有两种选择: 1) 只有一个静态数据成员。静态成员,例如单例模式在Java中的实现,java,design-patterns,singleton,Java,Design Patterns,Singleton,最近有人在采访中问我:如何在Java中实现单例设计模式 我有点困惑,因为有两种选择: 1) 只有一个静态数据成员。静态成员,例如 private static Logger logger; 将确保给定类的所有对象之间只共享一个记录器 2) 实现限制实例的实例控制器: public class LoggerWrapper { private static Logger instance = null; private LoggerWrapper() {
private static Logger logger;
将确保给定类的所有对象之间只共享一个记录器
2) 实现限制实例的实例控制器:
public class LoggerWrapper {
private static Logger instance = null;
private LoggerWrapper() { }
public static Logger getInstance() {
if (instance == null) {
instance = new Logger ();
}
return instance;
}
}
这两种单例方法有什么区别?第一种方法在你的课堂之外是不可访问的。第二个可以由类使用,而不是在其中声明其属性的类。正如Sotirios Delimanolis所指出的,实例需要是静态的,以便静态getInstance()方法可以访问它,从而确保所有调用方获得相同的版本
请注意,对于单例,有很多种方法,在实现一种方法之前,您应该仔细考虑
实例
字段必须是静态
。好吧,您的第二个代码将无法编译。也不是线程安全的,您可以使用枚举
生成单例。。还有延迟的按需初始化hat aboutprivate static final Logger LOG=LoggerFactory.getLogger(MyClass.class)代码>?我不认为这是一个很好的复制品-虽然这个问题是关于如何实现单例的,但明确的答案是:不要这样做。。。