From a1292c19a2f7e4187a7efa2da9470b06350fe858 Mon Sep 17 00:00:00 2001 From: lik <1178981326@qq.com> Date: Sun, 5 Apr 2020 08:54:27 +0800 Subject: [PATCH] =?UTF-8?q?=E4=B8=AD=E8=8B=B1=E6=96=87=E6=8B=AC=E5=8F=B7?= 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 15f7df1..2f045bd 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` 来实现接口),那么就不能使用这种方法。 \ No newline at end of file +  这种方式类似于公共属性方法,但更简洁,它无偿地提供了序列化机制,并提供了防止多个实例化的坚固保证,即使是在复杂的序列化或反射攻击的情况下。这种方法可能感觉有点不自然,但是 **单一元素枚举类通常是实现单例的最佳方式**。注意,如果单例必须继承 `Enum` 以外的父类 (尽管可以声明一个 `Enum` 来实现接口),那么就不能使用这种方法。 \ No newline at end of file