diff --git a/notes/设计模式.md b/notes/设计模式.md index 72c1cd81..def098bb 100644 --- a/notes/设计模式.md +++ b/notes/设计模式.md @@ -151,7 +151,29 @@ uniqueInstance 采用 volatile 关键字修饰也是很有必要的。`uniqueIns 使用 volatile 可以禁止 JVM 的指令重排,保证在多线程环境下也能正常运行。 -(五)枚举实现 + +(五)静态内部类实现 + +这种实现方式的原理:当静态类加载时,静态内部类没有加载进内存。只有当外部调用`getInstance()`方法,静态内部类才会被加载并实例化一个单例的对象,之后每次 +调用`getInstance()`都会获取相同的对象。此方法不需要同步。 + +```java +public class Singleton { + + private Singleton() { + } + + private static class SingletonHelper { + private static final Singleton INSTANCE = new Singleton(); + } + + public static Singleton getUniqueInstance() { + return SingletonHelper.INSTANCE; + } +} +``` + +(六)枚举实现 这是单例模式的最佳实践,它实现简单,并且在面对复杂的序列化或者反射攻击的时候,能够防止实例化多次。