From 531aa253463225203cf4fe617284076c231ee7ee Mon Sep 17 00:00:00 2001 From: Joe <736777445@qq.com> Date: Sat, 4 Apr 2020 20:58:53 +0800 Subject: [PATCH] =?UTF-8?q?Update=2003.=20=E4=BD=BF=E7=94=A8=E7=A7=81?= =?UTF-8?q?=E6=9C=89=E6=9E=84=E9=80=A0=E6=96=B9=E6=B3=95=E6=88=96=E6=9E=9A?= =?UTF-8?q?=E7=B1=BB=E5=AE=9E=E7=8E=B0Singleton=E5=B1=9E=E6=80=A7.md?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- docs/notes/03. 使用私有构造方法或枚类实现Singleton属性.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/docs/notes/03. 使用私有构造方法或枚类实现Singleton属性.md b/docs/notes/03. 使用私有构造方法或枚类实现Singleton属性.md index 7315771..1ab89c0 100644 --- a/docs/notes/03. 使用私有构造方法或枚类实现Singleton属性.md +++ b/docs/notes/03. 使用私有构造方法或枚类实现Singleton属性.md @@ -1,7 +1,7 @@ # 3. 使用私有构造方法或枚类实现 Singleton 属性 -  单例是一个仅实例化一次的类[Gamma95]。单例对象通常表示无状态对象,如函数 (条目 24) 或一个本质上唯一的系统组件。让一个类成为单例会使测试它的客户变得困难,因为除非实现一个作为它类型的接口,否则不可能用一个模拟实现替代单例。 +  单例是一个仅实例化一次的类[Gamma95]。单例对象通常表示无状态对象,如函数 (详见第 24 条) 或一个本质上唯一的系统组件。让一个类成为单例会使测试它的客户变得困难,因为除非实现一个作为它类型的接口,否则不可能用一个模拟实现替代单例。   有两种常见的方法来实现单例。两者都基于保持构造方法私有和导出公共静态成员以提供对唯一实例的访问。在第一种方法中,成员是 `final` 修饰的属性: @@ -56,4 +56,4 @@ public enum Elvis { } ``` -  这种方式类似于公共属性方法,但更简洁,无偿地提供了序列化机制,并提供了防止多个实例化的坚固保证,即使是在复杂的序列化或反射攻击的情况下。这种方法可能感觉有点不自然,但是 **单一元素枚举类通常是实现单例的最佳方式**。注意,如果单例必须继承 `Enum` 以外的父类 (尽管可以声明一个 `Enum` 来实现接口),那么就不能使用这种方法。 +  这种方式类似于公共属性方法,但更简洁,无偿地提供了序列化机制,并提供了防止多个实例化的坚固保证,即使是在复杂的序列化或反射攻击的情况下。这种方法可能感觉有点不自然,但是 **单一元素枚举类通常是实现单例的最佳方式**。注意,如果单例必须继承 `Enum` 以外的父类(尽管可以声明一个 `Enum` 来实现接口),那么就不能使用这种方法。