题意整理

  • 实例化一个Singleton类,保证每次调用实例化方法时,得到的是相同的实例。

方法一(懒汉式)

1.解题思路

  • 当对象为空时,才进行new操作,保证一个类只有一个实例。
  • 这种方法是单例模式的懒汉式实现。存在线程安全的问题,可以通过加锁保证线程安全,但是又会产生效率问题。比较理想的方案是双重校验,即DCL单例实现,或者使用静态内部类实现。

图解展示: alt

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操作,所以时间复杂度为O(1)O(1)
  • 空间复杂度:不需要额外的空间,所以空间复杂度为O(1)O(1)