【发布时间】:2023-04-09 23:30:01
【问题描述】:
This answer 表示我们不能通过private 构造函数一次实例化多个对象。我修改了相反的代码:
class RunDatabase{
public static void main(String[] args){
Database db = Database.getInstance("hello");//Only one object can be instantiated at a time
System.out.println(db.getName());
Database db1 = Database.getInstance("helloDKVBAKHVBIVHAEFIHB");
System.out.println(db1.getName());
}
}
class Database {
//private static Database singleObject;
private int record;
private String name;
private Database(String n) {
name = n;
record = 0;
}
public static synchronized Database getInstance(String n) {
/*if (singleObject == null) {
Database singleObject = new Database(n);
}
return singleObject;*/
return new Database(n);
}
public void doSomething() {
System.out.println("Hello StackOverflow.");
}
public String getName() {
return name;
}
}
正如预期的那样,两个字符串都被打印出来了。我错过了什么吗?
【问题讨论】:
-
是的,你错过了你的陈述(问题)的部分,专门提到了
singleton。 -
答案没有这么说。私有构造函数只是执行单例模式的一种方式。您只能通过将 main 放在该类中来欺骗它。
-
创建构造函数
private是实现单例模式所需要做的事情之一。但这不是唯一的,仅此本身并不会自动使其成为单例。 -
这么多反对票,我应该删除问题吗?
-
@piepi,你不应该,你已经得到了 3 个很好的答案
标签: java constructor