3

据我所知,单例设计模式意味着我们只能创建一个类的一个单一对象

以下代码成功运行,没有任何错误/异常。

我预计代码会失败,因为SingletonExample该类有一个私有的默认构造函数。

public class SingletonExample {
    private static SingletonExample singletonInstance;

    private SingletonExample() {
    }

    public static SingletonExample getSingletonInstance() {
        if (null == singletonInstance) {
            System.out.println("Creating new instance");
            singletonInstance = new SingletonExample();
        }
        return singletonInstance;
    }

    public void printSingleton(){
        System.out.println("Inside print Singleton");
    }

    public static void main(String a[])  {
        SingletonExample singObj1 = new SingletonExample();
        SingletonExample singObj2 = new SingletonExample();
    }
}

我的代码有问题吗?

4

4 回答 4

23

因为您的main方法在 classSingletonExample中,所以main代码可以访问私有构造函数。

尝试将您的main方法移动到另一个类。

于 2013-07-15T18:32:53.157 回答
0

您在同一类中调用单例类的私有构造函数,因此您可以访问构造函数,否则您无法访问。设计模式将定义规则来避免正常的人为错误。

于 2013-07-16T01:53:48.657 回答
0

使用枚举而不是类。没有人能够替换您的实例:

public enum SingletonExample {
    singletonInstance;

    private SingletonExample() {
        System.out.println("Creating new instance");          
    }

    public static void main(String a[])  {

    }
}
于 2013-07-17T11:48:22.677 回答
0

单例模式的目的是控制实例的数量,并且您已经正确地完成了。只有这个类可以创建实例,所以只创建一个。

于 2013-07-16T08:13:50.747 回答