Java嵌套if else优化

多分支复杂条件嵌套判断会让逻辑变得更加复杂,后期难以维护。优化传统的if else 写法,使得业务逻辑更加清晰,后期也便于维护。

1. 传统实现

package demo.replace.ifelse;

/**
 * 优化过多 if else 原始业务版本
 *
 * @author dingwen
 * @date 2021/08/15
 */
public class OriginalDemo {
    public static void main(String[] args) {
        System.out.println("new OriginalDemo().recharge(2000.0) = " + new OriginalDemo().recharge(2000.0));

    }


    /**
     * 充值
     *
     * @param money 钱
     */
    public String recharge(Double money) {
        // 优化第一步: 不满足条件优先截断返回
        if (money == null) {
            return "参数错误,充值金额不能为空";
        }

        if (money <= 0) {
            return "参数错误,充值金额必须大于0";
        }

        if (money >= 1000) {
            return "充值1000 送66天爱奇艺影视VIP";
        } else if (money >= 2000) {
            return "充值2000以上 送90天爱奇艺影视VIP 两次抽奖机会";
        } else if (money >= 5000) {
            return "充值5000以上 送半年爱奇艺影视VIP 5次抽奖机会";
        } else if (money >= 10000) {
            return "充值10000以上 送一年爱奇艺影视VIP 1000元现金奖励 5次抽奖机会";
        } else {
            return "其他优惠";
        }


    }

}

2.策略模式+工厂模式+单例模式优化

2.1 策略接口

package demo.replace.ifelse;

/**
 * 充电
 * 充值接口
 *
 * @author dingwen
 * @date 2021/08/15
 */
public interface Recharge {
    /**
     * 充值
     *
     * @param money 钱
     * @return {@link String}
     */
    String recharge(Double money);
}

2.2 不同策略实现类

2.2.1 处理策略一
package demo.replace.ifelse;

/**
 * 充值1000处理
 *
 * @author dingwen
 * @date 2021/08/15
 */
public class OneCharge implements Recharge {
    @Override
    public String recharge(Double money) {
        return "充值1000 送66天爱奇艺影视VIP";
    }
}

2.2.2 处理策略二
package demo.replace.ifelse;

/**
 * 充值1000处理
 *
 * @author dingwen
 * @date 2021/08/15
 */
public class TwoCharge implements Recharge {
    @Override
    public String recharge(Double money) {
        return "充值2000以上 送90天爱奇艺影视VIP 两次抽奖机会";
    }
}

2.2.3 处理策略三
package demo.replace.ifelse;

/**
 * 充值1000处理
 *
 * @author dingwen
 * @date 2021/08/15
 */
public class FiveCharge implements Recharge{
    @Override
    public String recharge(Double money) {
        return "充值5000以上 送半年爱奇艺影视VIP 5次抽奖机会";
    }
}

2.2.4 处理策略四
package demo.replace.ifelse;

/**
 * 充值1000处理
 *
 * @author dingwen
 * @date 2021/08/15
 */
public class TenCharge implements Recharge{
    @Override
    public String recharge(Double money) {
        return "充值10000以上 送一年爱奇艺影视VIP 1000元现金奖励 5次抽奖机会";
    }
}

3.策略工厂

package demo.replace.ifelse;

import com.google.common.collect.ImmutableMap;

import java.util.Map;

/**
 * 充值处理工厂类
 * 策略模式 + 工厂模式 + 单例模式
 * @author dingwen
 * @date 2021/08/15
 */
public class RechargeFactory {
    static Map<String,Recharge> map;

    static {
        map = ImmutableMap.of(
                "1000.0",new OneCharge(),
                "2000.0",new TwoCharge(),
                "5000.0",new FiveCharge(),
                "10000.0",new TenCharge()
        );
    }


    /**
     * 单例持有者
     *
     * @author dingwen
     * @date 2021/08/15
     */
    public static class SingletonHolder{
        public static RechargeFactory rechargeFactory = new RechargeFactory();
    }

    /**
     * 获得实例
     *
     * @return {@link RechargeFactory}
     */
    public static RechargeFactory getInstance(){
        return SingletonHolder.rechargeFactory;
    }

    /**
     * 得到充值处理策略
     *
     * @param money 钱
     * @return {@link Recharge}
     */
    public Recharge getRecharge(Double money){
        return map.get(money.toString());
    }


}


4.使用

package demo.replace.ifelse;

import java.util.Optional;

/**
 * 优化测试
 *
 * @author dingwen
 * @date 2021/08/15
 */
public class OptimizationTest {
    public static void main(String[] args) {
        charge(10000.0);
    }

    public static void charge(Double money){
        Recharge recharge = RechargeFactory.getInstance().getRecharge(money);
        Optional.ofNullable(recharge).orElseThrow(() -> new RuntimeException("充值处理策略获取异常"));
        System.out.println("recharge.recharge(money) = " + recharge.recharge(money));
    }
}

5.参考资料

https://mp.weixin.qq.com/s/pO4_2L-9-MEsN5KI-gFFrQ

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

dingwen_blog

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值