使用枚举enum来代替if/else
在平时的代码中,if/else肯定是必不可少,但是有时使用if/else却不是代码的最好选择,下面介绍下平时会在实际工作代码中使用到的用enum来代替if/else的写法.
举个栗子
现在有个需求,我们公司有vip等级,1,2,3,根据等级高低,能获取不同的优惠信息,最简单也最容易想到的代码是:
//获取折扣信息
public static void main(String[] args) {
int vipLevel = 2;//业务中获取到会员等级
VipService.getDiscount(vipLevel);//根据会员等级拿到折扣信息
}
//获取折扣信息
public static double getDiscount(int vipLevel) {
if (vipLevel == 1) {
return 0.95;
} else if (vipLevel == 2) {
return 0.8;
} else if (vipLevel == 3) {
return 0.7;
} else {
return 1;
}
}
然而问题是如果将来要多一个vip4,那你毫无疑问,你肯定是要动这里面的业务逻辑代码,这是有风险的,而且我们知道一个好的代码应该是拥有良好的扩展性的,如果用枚举就可以解决这一问题.
第一步:建一个vip接口,用于标识会员拥有的权力
public interface VipOperation {
//获取优惠信息
double getDiscount();
}
第二步:建立一个vip的枚举
public enum VipEnum implements VipOperation {
VIP_LEVEL_1 (1){
@Override
public double getDiscount() {
return 0.95;
}
},
VIP_LEVEL_2 (2){
@Override
public double getDiscount() {
return 0.8;
}
},
VIP_LEVEL_3 (3){
@Override
public double getDiscount() {
return 0.7;
}
};
int vipLevel = 0;
VipEnum(int vipLevel) {
this.vipLevel = vipLevel;
}
//根据vip等级获取vip枚举
public static VipEnum getInstance(int vipLevel) {
for (VipEnum vipEnum : VipEnum.values()) {
if (vipEnum.vipLevel == vipLevel) {
return vipEnum;
}
}
return null;
}
}
第三步:使用枚举
int vipLevel = 2;//获取会员等级
VipEnum vip = VipEnum.getInstance(vipLevel);
vip.getDiscount();
好了,到此为至,替代if/else的功能已经实现.
虽然表面上看,代码好像多了不少,但是在后续,如果你有新加的vip等级,比如vip4,vip5…时,你就不用去动业务层里的代码了,而只要在VipEnum中加上一个vip4,vip5…的枚举,另外实现getDiscount方法即可,轻松实现拓展.
本人才疏学浅,这也只是本人的一点对代码的看法,可能存在疏漏与错误,如果有发现文中有什么错误或更好的建议,欢迎大家在下方留言评论与指正.
来源:CSDN
作者:混蛋先生
链接:https://blog.csdn.net/weixin_44437060/article/details/103800557