了解Java枚举在单例模式的应用
理解Java枚举在单例模式的应用
5.3.9 单例和枚举
按照《高效Java 第二版》中的说法:单元素的枚举类型已经成为实现Singleton的最佳方法。
为了理解这个观点,先来了解一点相关的枚举知识,这里只是强化和总结一下枚举的一些重要观点,更多基本的枚举的使用,请参看Java编程入门资料。
Java的枚举类型实质上是功能齐全的类,因此可以有自己的属性和方法。
Java枚举类型的基本思想是通过公有的静态final域为每个枚举常量导出实例的类。
从某个角度讲,枚举是单例的泛型化,本质上是单元素的枚举。
用枚举来实现单例非常简单,只需要编写一个包含单个元素的枚举类型即可。示例代码如下:
- /**
- * 使用枚举来实现单例模式的示例
- */
- public enum Singleton {
- /**
- * 定义一个枚举的元素,它就代表了Singleton的一个实例
- */
- uniqueInstance;
- /**
- * 示意方法,单例可以有自己的操作
- */
- public void singletonOperation(){
- //功能处理
- }
- }
使用枚举来实现单实例控制会更加简洁,而且无偿地提供了序列化的机制,并由JVM从根本上提供保障,绝对防止多次实例化,是更简洁、高效、安全的实现单例的方式。
-------------------一个示例-------------------------
public enum Elvis { INSTANCE("wangfabo", 1); private final int id; private final String name; Elvis(String n, int i) { id=i; name=n; } public void leaveTheBuilding() { System.out.println("name:"+name+" id:"+id);; } public Elvis getInstance(){ return INSTANCE; } }