java枚举的应用
巧用枚举可以简化不少操作
java中的枚举我认为有以下几种用途
限定范围
这是枚举最基础的应用,作为参数或者响应可以限制取值范围,过于简单不加赘述
存储常量
java中的枚举实际上就是类的简化,所以大多数类的语法都能应用于枚举,比如成员变量和构造方法
1 | |
和一般的常量类比起来,优点是可以将多种常量分组存放,比如http中常见的响应码由code和msg组成,各大框架一般都用枚举来存放
注意,由于枚举都只有一个实例,所以不能用来存储变量。题外话,rust的枚举可以存放变量,这一点还是很好的
实现设计模式
使用枚举可以轻松实现部分设计模式
单例模式
用普通类实现的单例模式有可能会被反序列化破坏(话说什么情况下才会去反序列化单例类啊),而使用枚举可以避免这一点
策略模式
策略模式是为了取代大量的if else,枚举也可以简单实现这一点
因为枚举是类,所以里面也可以有方法,例如这样写
1 | |
常规的策略模式一般是将不同逻辑拆分到不同子类,再通过某种方式,比如工厂类来获取某个具体实现;使用枚举实现就只需要传一个枚举值就可以了;
相比起策略模式动则四五个类,枚举只需要在一个文件——也只能在一个文件——内写完所有逻辑;
不过缺点也很明显,枚举都是单实例,所以所有依赖都需要在方法参数上写出来,如果不同的实现需要不同的依赖,那参数表会很长,而且修改起来也比较繁琐
责任链模式
策略模式取代if else,责任链也可以说是取代循环类
用枚举实现和上面的代码几乎一模一样,只是在调用的时候写成这样
1 | |
相比责任链模式,可以省去注册等流程,而且顺序也可以轻松调整,缺点就是调用上稍微麻烦一些
java枚举的应用
http://blog.inkroom.cn/2023/08/19/19Q3283.html