Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
OpenDocCN
effective-java-3rd-chinese
提交
531aa253
E
effective-java-3rd-chinese
项目概览
OpenDocCN
/
effective-java-3rd-chinese
9 个月 前同步成功
通知
214
Star
9
Fork
4
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
E
effective-java-3rd-chinese
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
前往新版Gitcode,体验更适合开发者的 AI 搜索 >>
未验证
提交
531aa253
编写于
4月 04, 2020
作者:
J
Joe
提交者:
GitHub
4月 04, 2020
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Update 03. 使用私有构造方法或枚类实现Singleton属性.md
上级
3651cc50
变更
1
隐藏空白更改
内联
并排
Showing
1 changed file
with
2 addition
and
2 deletion
+2
-2
docs/notes/03. 使用私有构造方法或枚类实现Singleton属性.md
docs/notes/03. 使用私有构造方法或枚类实现Singleton属性.md
+2
-2
未找到文件。
docs/notes/03. 使用私有构造方法或枚类实现Singleton属性.md
浏览文件 @
531aa253
# 3. 使用私有构造方法或枚类实现 Singleton 属性
单例是一个仅实例化一次的类[Gamma95]。单例对象通常表示无状态对象,如函数 (
条目 24
) 或一个本质上唯一的系统组件。让一个类成为单例会使测试它的客户变得困难,因为除非实现一个作为它类型的接口,否则不可能用一个模拟实现替代单例。
单例是一个仅实例化一次的类[Gamma95]。单例对象通常表示无状态对象,如函数 (
详见第 24 条
) 或一个本质上唯一的系统组件。让一个类成为单例会使测试它的客户变得困难,因为除非实现一个作为它类型的接口,否则不可能用一个模拟实现替代单例。
有两种常见的方法来实现单例。两者都基于保持构造方法私有和导出公共静态成员以提供对唯一实例的访问。在第一种方法中,成员是
`final`
修饰的属性:
...
...
@@ -56,4 +56,4 @@ public enum Elvis {
}
```
这种方式类似于公共属性方法,但更简洁,无偿地提供了序列化机制,并提供了防止多个实例化的坚固保证,即使是在复杂的序列化或反射攻击的情况下。这种方法可能感觉有点不自然,但是
**单一元素枚举类通常是实现单例的最佳方式**
。注意,如果单例必须继承
`Enum`
以外的父类
(尽管可以声明一个
`Enum`
来实现接口)
,那么就不能使用这种方法。
这种方式类似于公共属性方法,但更简洁,无偿地提供了序列化机制,并提供了防止多个实例化的坚固保证,即使是在复杂的序列化或反射攻击的情况下。这种方法可能感觉有点不自然,但是
**单一元素枚举类通常是实现单例的最佳方式**
。注意,如果单例必须继承
`Enum`
以外的父类
(尽管可以声明一个
`Enum`
来实现接口)
,那么就不能使用这种方法。
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录