Java 使用 Enum 实现单例模式
2024-10-16 17:07:38
在这篇文章中介绍了单例模式有五种写法:懒汉、饿汉、双重检验锁、静态内部类、枚举。如果涉及到反序列化创建对象时推荐使用枚举的方式来实现单例,因为Enum能防止反序列化时重新创建新的对象。本文介绍 Enum 的使用方式。
public enum SingletonEnum{
INSTANCE;
}
通过SingletonEnum.INSTANCE来访问实例,使用方式很简单. 然而就这么简单的话也没有更多意义,具体的使用方式如下[1]:
public enum SingletonEnum {
INSTANCE;
int value;
// 这里我们可以自定义构造函数.
private SingletonEnum() {
value = 1;
System.out.println("INSTANCE now created!");
}
public int getValue() {
return value;
}
public void setValue(int value) {
this.value = value;
}
}
调用:
System.out.println("start get instance!");
SingletonEnum singleton = SingletonEnum.INSTANCE;
System.out.println(singleton.getValue());
singleton.setValue(2);
System.out.println(singleton.getValue());
输入结果为:
start get instance!
INSTANCE now created!
1
2
上面的SingletonEnum的定义利用的enum是一种特殊的class.代码中的第一行INSTANCE会被编译器编译为SingletonEnum本身的一个对象.当第一次访问SingletonEnum.INSTANCE时会创建该对象,并且enum变量的创建是线程安全的.[2]
最新文章
- gjd
- metinfo首页内容简介
- win8 鼠标失灵解决办法
- iOS 沙盒(sandbox)机制和文件操作
- [ionic开源项目教程] - 第8讲 根据菜单分类加载数据(重要)
- Ubuntu中文输入法的安装
- Live555中RTP包的打包与发送过程分析
- HDnoip2017题解
- Xapian的内存索引-添加文档
- flask中接收post传递数组方法
- WinForm 进度条
- pytest 5. fixture之yield实现teardown
- poj3320 Jessica's Reading Problem(尺取思路+STL)
- 哆啦A梦欺骗了你!浏览器CSS3测试遭质疑
- Python实现排列组合
- localStorage/cookie 用法分析与简单封装
- python中list和str互转
- SGU 403 Game with points
- JavaScript入门学习书籍的阶段选择
- LeetCode——Add and Search Word - Data structure design