自Java 5以来,最好的创建单例的方法是使用单元素枚举类型。
例如:
根据Joshua Bloch的说法,单元素枚举类型singleton更加简洁,提供了免费的序列化机制,并且提供了针对多次实例化的坚固保护。
我可以理解它更加简洁并提供了针对多次实例化的坚固保护,但是它如何提供免费的序列化机制呢?
这是因为单例模式作为一个枚举类型获得了这个特性。
例如:
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更加简洁,提供了免费的序列化机制,并且提供了针对多次实例化的坚固保护。
我可以理解它更加简洁并提供了针对多次实例化的坚固保护,但是它如何提供免费的序列化机制呢?
这是因为单例模式作为一个枚举类型获得了这个特性。
static final
等)不值得”。他在EJ2中多次使用类似的论点...类比地,人们会说“不要使用枚举来声明单例类;单例不是enum
-它产生语义不匹配和噪音,并且获得的语法糖不值得”。 - user719662