从Java 5开始,据说创建单例的最好方法是使用单元素枚举类型。
的例子:
public enum SuperSingleton implements Zooma{
INSTANCE;
/**
*/
public void fightTheBattle(){
System.out.println("I am fighting the battle!!!");
}
@Override
public void runningWild() {
//This is method implemented from the Zooma interface.
}
}
根据Joshua Bloch,单元素枚举类型singleton是;
- 更简洁
- 提供免费的序列化机制
- 并提供了一个针对多个实例化的铁甲。
我可以看到它是如何更简洁的,以及它是如何提供一个铁的防止多个实例化,但是它是如何免费提供序列化机制的呢?
是否是单例通过枚举得到的?
是的,枚举都是从实现Serializable
的Enum
类扩展而来的。
我不是百分之百确定,但我认为如果你反序列化一个序列化的单例不止一次,你可能会得到不止一个实例。枚举实例将始终保持单例。
所以你得到了'更多的序列化'而不是仅仅实现序列化。
http://download.oracle.com/javase/1.5.0/docs/api/java/lang/Enum.html
是的:)