使用枚举enum来代替if/else

使用枚举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方法即可,轻松实现拓展.

本人才疏学浅,这也只是本人的一点对代码的看法,可能存在疏漏与错误,如果有发现文中有什么错误或更好的建议,欢迎大家在下方留言评论与指正.

  • 0
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 2
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值