单例模式 | 通过静态内部类实现

实现单例模式主要考虑以下三点:
  • 1.是否线程安全
  • 2.是否懒加载
  • 3.能否通过反射破坏(枚举类型不能反射)

一般的单例模式都符合前面两点,线程安全和懒加载;但是都可以通过反射破坏,不过反射一般是人为的操作,可以避免。如果想要不被反射,可以使用枚举类型,但是枚举类型会在程序一启动就会加载,不能懒加载。


单例模式通常由饱汉式和饿汉式,双检式,还有一个模式可以通过静态内部类实现
静态内部类写法

优点:

  • 静态内部类是你第一次调用的时候才实例化,而静态代码块,在程序启动加载时就实例化了
  • 相比之下节省了内存
/**
 * 内部类,只要没有被使用,就不会初始化,Singleton的实例就不会创建
 * 在第一次有人调用getInstance方法的时候,内部类会初始化,创建一个Singleton的实例
 * 类静态初始化的过程一定只会执行一次
 */
public class LazySingleton {
    
    

	private static class InnerHolder {
    
    
        private static final LazySingleton INSTANCE = new LazySingleton();
    }

    private LazySingleton() {
    
    }

    public static LazySingleton getInstance() {
    
    
        return InnerHolder.INSTANCE;
    }
}

猜你喜欢

转载自blog.csdn.net/qq_25112523/article/details/117086450
今日推荐