在Java中如何写一个正确的单例模式?

Table of Contents

1 什么是单例模式

保证一个类只有一个实例,并且提供一个全局可以访问的入口。
public class ExpensiveResource {
    public ExpensiveResource() {
        field1 = //查询数据库
        field2 = //然后对查到的数据做大量计算
        field3 = //加密、压缩等耗时操作
    }
}

2 使用场景

  1. 无状态的工具类
    • 日志工具
    • 字符串工具
  2. 全局信息类
    • 全局计数
    • 环境变量

3 常见单例模式写法

  • 饿汉式
  • 懒汉式
  • 静态内部类式
  • 双重检查式
  • 枚举式

3.1 饿汉式

public class Singleton {
  private static Singleton singleton = new Singleton();

  private Singleton(){}

  public static Singleton getInstance() {
    return singleton;
  }
}