5.枚举实现单例模式
package java_227_GOF23设计模式_单例模式__双重检查锁式_静态内部类模式_枚举式_UML_类图_练习;
/**
- 枚举模式实现单例模式
- 优点: 1.避免了反射和反序列化的漏洞
-
2.调用效率相对比较高
-
3.
- 缺点:没有延时加载
/
public enum SingletonDemo05 {//enum枚举的缩写
/*- 定义一个枚举的元素,它就代表了Singleton的一个实例
/
INSTANCE;//这个枚举元素,本身就是单例对象
/* - 单例可以有自己的操作
*/
//添加自己想要的操作
public void singletonOperation(){
//功能处理
}
}
//-----------------------测试单例模式---------------------------------
- 定义一个枚举的元素,它就代表了Singleton的一个实例
package java_227_GOF23设计模式_单例模式__双重检查锁式_静态内部类模式_枚举式_UML_类图_练习;
import java_226_GOF23设计模式_单例模式_应用场景_饿汉模式_懒汉模式_练习.SingletonDemo01;
import java_226_GOF23设计模式_单例模式_应用场景_饿汉模式_懒汉模式_练习.SingletonDemo02;
/**
- 测试
*/
public class Client {
public static void main(String[] args) {
//因为是私有的不能直接new
SingletonDemo01 s1 = SingletonDemo01.getInstance();
SingletonDemo02 s2 = SingletonDemo02.getInstance();
SingletonDemo03 s3 = SingletonDemo03.getInstance();
SingletonDemo04 s4 = SingletonDemo04.getInstance();
SingletonDemo05 sd = SingletonDemo05.INSTANCE;
SingletonDemo05 sd2 = SingletonDemo05.INSTANCE;
System.out.println("====恶汉与懒汉模式===");
System.out.println(s1);
System.out.println(s2);
System.out.println("====双重检查锁式;偶尔会出错===");
System.out.println(s3);
System.out.println("====静态内部类模式===");
System.out.println(s4);
System.out.println("====枚举模式===");
System.out.println(sd==sd2);
}
}