使用枚举enum来代替if/else

一曲冷凌霜 提交于 2020-01-29 01:27:11

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

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

标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!