2

我最近在一次采访中被问到:如何在 Java 中实现单例设计模式?

我有点困惑,因为有两种选择:

1)只有一个静态数据成员。静态成员,例如

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;
        }
}

这两种单例方法有什么区别?

4

1 回答 1

1

第一个在您的班级之外无法访问。第二个可以被声明它的类以外的类使用。正如 Sotirios Delimanolis 所指出的,实例需要是静态的,以便静态 getInstance() 方法可以访问它,确保所有调用者都获得相同的版本。

请注意,单例存在很多问题,您应该在实施之前三思而后行。

于 2013-09-27T15:30:27.957 回答