这篇文章中介绍了单例模式有五种写法:懒汉、饿汉、双重检验锁、静态内部类、枚举。如果涉及到反序列化创建对象时推荐使用枚举的方式来实现单例,因为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]


  1. https://dzone.com/articles/java-singletons-using-enum ↩︎

  2. https://stackoverflow.com/questions/26285520/implementing-singleton-with-an-enum-in-java ↩︎

最新文章

  1. gjd
  2. metinfo首页内容简介
  3. win8 鼠标失灵解决办法
  4. iOS 沙盒(sandbox)机制和文件操作
  5. [ionic开源项目教程] - 第8讲 根据菜单分类加载数据(重要)
  6. Ubuntu中文输入法的安装
  7. Live555中RTP包的打包与发送过程分析
  8. HDnoip2017题解
  9. Xapian的内存索引-添加文档
  10. flask中接收post传递数组方法
  11. WinForm 进度条
  12. pytest 5. fixture之yield实现teardown
  13. poj3320 Jessica's Reading Problem(尺取思路+STL)
  14. 哆啦A梦欺骗了你!浏览器CSS3测试遭质疑
  15. Python实现排列组合
  16. localStorage/cookie 用法分析与简单封装
  17. python中list和str互转
  18. SGU 403 Game with points
  19. JavaScript入门学习书籍的阶段选择
  20. LeetCode——Add and Search Word - Data structure design

热门文章

  1. Hiberante持久化对象的3种状态
  2. 【WPF】两则动画效果
  3. 类加载, 静态变量初始化, String不可变, 泛型使用, 内部类
  4. Remote 桌面的win2003 servre端设定
  5. typedef你真的理解么?
  6. python 回溯法 子集树模板 系列 —— 9、旅行商问题(TSP)
  7. noip 提高组 2010
  8. Maven学习第1期---Maven简单介绍
  9. Hadoop框架
  10. Python中浅拷贝和深拷贝的区别总结与理解