单例模式

46 阅读1分钟

单例模式的创建方式有哪两种,分别怎么实现?

  • 饿汉式单例
  public class SingletonTest {
          // 1. 类对象
          private static SingletonTest instance = new  SingletonTest();
         // 2. 构造函数 设置为 私有权限,禁止他人创建实例
          private SingletonTest() {
          }
          // 3. 通过调用静态方法获得单例
          public static SingletonTest newInstance() {
              return instance;
         }
   }
  • 懒汉式单例
public class SingletonTest {
    // 1. 创建静态内部类
    private static class SingletonTestHolder {
            // 静态内部类里创建单例,JVM只会加载1遍,Java虚拟机保证了线程安全性
            private static SingletonTest instance = new SingletonTest();
    }
    // 2. 构造函数设置为私有权限,禁止他人创建实例
    private SingletonTest() {}
    // 3. 延迟加载,按需创建
    public static  SingletonTest getInstance() {
      // 在调用装载被初始化时,会初始化它的静态域,从而创建单例;
          return SingletonTestHolder.instance;
        }
}