单例模式之枚举实现
单例模式
单例模式是设计模式中最简单的形式之一。这一模式的目的是使得类的一个对象成为系统中的唯一实例。
枚举类型
为什么要引入枚举类?就是因为在没有枚举类的时候,我们要定义一个有限的序列,比如星期几,男人女人,春夏秋冬,一般会通过上面那种静态变量的形式,但是使用那样的形式如果需要一些其他的功能,需要些很多奇奇怪怪的代码。所以,枚举类的出现,就是为了简化这种操作。
public enum Weekday {
SUN,MON,TUS,WED,THU,FRI,SAT;
}
枚举实现单例模式
假如有要求,要实现Person类的单例。
public enum Person {
INSTANCE;//实体,类的对象
public Person getInstance(){
return INSTANCE;
}
测试:如果通过反射获取的INSTANCE不同,那么就不算能实现单例模式。(ps:看下面代码需要学习java反射机制)
public class FlectTest {
public static void main(String[] args) throws NoSuchMethodException, InvocationTargetException, IllegalAccessException {
//1.单例模式的getInstance方法
System.out.println(Person.INSTANCE.getInstance());//INSTANCE
//getEnumConstants获取枚举实体
//枚举实体类的获取:枚举对应的class没有newInstance方法,会报NoSuchMethodException,应该使用getEnumConstants方法获取实体类
Person[] o = Person.class.getEnumConstants();
System.out.println(o[0]);//INSTANCE
System.out.println(Person.INSTANCE.getInstance() == o[0]);//true,同一个对象实例,所以符合单例
}
}
结果如下:
结果为true,所以可以实现单例模式。