1.4及更早版本会失效,1.5及以后版本适用 P182
静态内部类 public class Singleton { private static class SingletonHolder { private final static Singleton INSTANCE = new Singleton(); } private Singleton() {} public static Singleton getInstance() { return SingletonHolder.INSTANCE; } }特点
线程安全
使用时再实例化
依赖 JVM 类加载机制:开始只有 Singleton 被加载了,只有在主动使用 SingletonHolder 时(即调用 getInstance() 时),才会加载 SingletonHolder 类,从而实例化 INSTANCE
枚举 public enum Singleton { INSTANCE }特点
线程安全
克隆、反射和反序列化均不会破坏单例(上述六种方式都会被破坏)
代码简单
1.5及以后版本才有枚举
初始化就会实例化(反编译后可以发现写法类似饿汉式(变种))
本文首发于公众号:满赋诸机(点击查看原文) 开源在 GitHub :reading-notes/head-first-design-patterns