单例模式是一种对象创建模式,确保系统中一个类只有一个实例

优点:

  1. 省略对象创建的时间
  2. 内存使用频率减少,减轻GC压力,缩短GC时间

参与者

角色 作用
单例类 提供单例工厂,返回单例
使用者 获取并使用单例类

简单代码

package com.example.demo;

public class SingleTon {
    private SingleTon() {
        System.out.println("SingleTon is create");
    }

    private static final SingleTon instance = new SingleTon();

    public static SingleTon getInstance() {
        return instance;
    }

    public static void createString() {
        System.out.println("createString");
    }
}

缺点:调用createString方法时,触发构造函数
懒加载

package com.example.demo;

public class LazySingleTon {

    private LazySingleTon() {
        System.out.println("LazySingleTon is create");
    }

    private static LazySingleTon instance = null;

    public static synchronized LazySingleTon getInstance() {
        if (instance == null) {
            instance = new LazySingleTon();
        }
        return instance;
    }
}

添加synchronized防止多线程创建多个对象
缺点:
1.多线程情况下,耗时较长

再次改造

package com.example.demo;

public class StaticSingleTon {

    private StaticSingleTon() {
        System.out.println("StaticSingleTon is create");
    }


    private static class SingleTonHolder {
        private static StaticSingleTon instance = new StaticSingleTon();
    }

    public static StaticSingleTon getInstance() {
        return SingleTonHolder.instance;
    }

    public static void createString() {
        System.out.println("createString");
    }
}