题意整理
- 实例化一个Singleton类,保证每次调用实例化方法时,得到的是相同的实例。
方法一(懒汉式)
1.解题思路
- 当对象为空时,才进行new操作,保证一个类只有一个实例。
- 这种方法是单例模式的懒汉式实现。存在线程安全的问题,可以通过加锁保证线程安全,但是又会产生效率问题。比较理想的方案是双重校验,即DCL单例实现,或者使用静态内部类实现。
图解展示:
2.代码实现
public class Main {
public static void main(String[] args) {
Singleton s1 = Singleton.getInstance();
Singleton s2 = Singleton.getInstance();
System.out.println(s1 == s2);
}
}
class Singleton {
private static Singleton instance;
private Singleton() {
}
public static Singleton getInstance(){
//如果为空,才进行实例化,保证一个类只有一个实例,存在线程安全的问题
if(instance==null){
instance=new Singleton();
}
return instance;
}
}
3.复杂度分析
- 时间复杂度:只需进行一次new操作,所以时间复杂度为。
- 空间复杂度:不需要额外的空间,所以空间复杂度为。