据我所知 Singleton Design Pattern 意味着我们只能创建一个 SINGLE OBJECT 类。
以下代码成功运行,没有任何错误/异常。
我希望代码失败,因为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();
}
}
我的代码有问题吗?
答案 0 :(得分:23)
由于您的main
方法位于类SingletonExample
中,因此main
代码可以访问私有构造函数。
尝试将main
方法移至另一个班级。
答案 1 :(得分:0)
你在同一个类中调用单例类的私有构造函数,这样你就可以访问构造函数了。设计模式将定义规则以避免正常的人为错误。
答案 2 :(得分:0)
单例模式的目的是控制实例数并且您已正确完成。只有这个类可以创建实例,所以只做一个。
答案 3 :(得分:0)
使用枚举而不是类。并且没有人能够替换您的实例:
public enum SingletonExample {
singletonInstance;
private SingletonExample() {
System.out.println("Creating new instance");
}
public static void main(String a[]) {
}
}