枚举实现单例模式
·
1. 枚举类的特点
-
枚举类型是一种特殊的类,它允许你定义一组命名的常量。这些常量通常是不可变的,并且在编译时就确定了。
-
枚举类通过
enum关键字来定义。每个枚举实例都是该枚举类型的对象,并且这些实例是固定的,不能动态创建。
2. 代码例子
-
枚举的构造方法是私有化的,天生适合单例
public enum Singleton {
INSTANCE;
public void doSomething() {
System.out.println("Singleton instance is doing something.");
}
}
3. 枚举实现单例的优点
-
实现简单:通过枚举来实现单例只需要定义一个枚举常量,避免了复杂的同步和懒加载问题。
-
线程安全:JVM 保证了枚举的线程安全性,无需额外的同步控制。
-
防反射破坏:枚举的构造器是私有的且只能被 JVM 调用,反射无法创建新实例。
-
防序列化破坏:枚举类自动提供了 readResolve() 方法,该方法会在反序列化过程中返回同一个枚举实例,防止反序列化创建新对象。
-
避免双重检查锁定:相比双重检查锁定、静态内部类等方式,枚举实现更加简洁和优雅,避免了 volatile 和同步块的复杂性。
4. 枚举实现单例的缺点
-
扩展性受限
-
如果你需要对单例的行为进行扩展,比如通过继承来增加新的功能,枚举类型就不如普通的类灵活。枚举不能被继承,也不能继承其他类。
更多推荐
所有评论(0)