我是一名经验丰富的java开发人员。 我的问题是:什么是单身人士?似乎我从未在我的项目中使用它(Java web,Spring boot)。 我只是不明白为什么以及何时应该使用单身人士。 对不起伙计们,让我解释一下我的困惑。 一个简单的单例类看起来像这样:
class Singleton {
private static Singleton instance;
private Singleton(){
}
public static Singleton getInstance(){
if(instance=null){
instance=new Singleton();
}
return instance;
}
........
}
当我想要新建一个单例对象时,看起来没有区别: Singleton s = new Singleton();
答案 0 :(得分:1)
单例模式使您可以控制可以实例化的单例类的实例数。它被用于许多用例。
经典的Java单例看起来就像你提到的一个非常重要的细节 - 非公共构造函数。
构造函数不是公共的(受保护的或私有的)这一事实不允许任何人按照你的建议创建一个新的单例实例:
Singleton singleton = new Singleton();
这与仅仅是普通班级有很大的不同。
请注意,这样的实现不是线程安全的,因此您要么将其初始化为线程安全或非延迟,如下所示:
非延迟初始化
public class Singleton {
private static Singleton instance = new Singleton();
private Singleton(){
}
public static Singleton getInstance(){
return instance;
}
}
线程安全
public class Singleton {
private static Singleton instance = null;
protected Singleton() {
}
public static Singleton getInstance() {
if (instance == null) {
synchronized (Singleton.class) {
if (instance == null) {
instance = new Singleton();
}
}
}
return instance;
}
}