枚举类
package com.fanhuaholdings.cbs.util;
import com.fanhuaholdings.cbs.rncontinue.calculator.AbstractRnContinueCalculator;
import com.fanhuaholdings.cbs.rncontinue.calculator.redis.RnContinueCalculatorGraceFunction;
import com.fanhuaholdings.cbs.rncontinue.calculator.redis.RnContinueCalculatorRedisFunction;
import lombok.Getter;
public enum FunctionEnum {
NORMAL(1){
@Override
Class<RnContinueCalculatorRedisFunction> matchCalcMode(Integer code) {
return RnContinueCalculatorRedisFunction.class;
}
},
SPECIAL_GRACE(2){
@Override
Class<RnContinueCalculatorGraceFunction> matchCalcMode(Integer code) {
return RnContinueCalculatorGraceFunction.class;
}
},
ROLLING(3){
@Override
Class<RnContinueCalculatorRedisFunction> matchCalcMode(Integer code) {
return RnContinueCalculatorRedisFunction.class;
}
};
public static Class<? extends AbstractRnContinueCalculator> matchType(Integer mode) {
for (FunctionEnum value : FunctionEnum.values()) {
if (value.getCode() == mode) {
return value.matchCalcMode(mode);
}
}
return RnContinueCalculatorRedisFunction.class;
}
@Getter
Integer code;
FunctionEnum(Integer code) {
this.code = code;
}
abstract Class<? extends AbstractRnContinueCalculator> matchCalcMode(Integer code);
}
使用
AbstractRnContinueCalculator function = applicationContext.getBean(FunctionEnum.matchType(rccv.getCalculateFunction()));
使用场景分析
1、可以看做简化的工厂模式,根据不同的枚举类型返回不同的实例;
2、可以针对参数相同,处理不同的逻辑进行简化代码
3、算法选择、处理逻辑选择、对象选择…
4、看着逼格高,哈哈哈哈
5、优化if-else