如何解决代码中得多个ifelse

     在我们得代码中,经常会有遇到有多个ifelse挤在一起得情况,如果这些代码不是非常长,并且不经常改变得话,那看起来也没有什么问题,但是,在实际情况中,我们得代码经常是需要扩展得,因为我们得需求在不断增加,那么如果每增加一种需求,我们就要多加一个else嘛?
     当然不是的,如果这样实现,会使得代码难以阅读,耦合性增加,它也违背我们的程序设计原则之一,开放关闭原则,即对扩展开发,对修改关闭.

举例:

   这里以电商中价格计算为场景切入,在价格计算中,我们通常需要根据不同用户去计算不同的价格,比如说vip(普通vip)–打九折优惠,svip(超级vip)–打八折优惠,normal(普通用户)–原价卖出.
   所以我们的代码可能是这样的.
在这里插入图片描述
      在实际中,这可能是一个非常冗余的代码,可能篇幅很大,我们需要对其进行改变,不然以后可能需求增加,我们在原有代码上进行修改,牵一发而动全身.怎么改? 策略模式
     我新建了一个接口,里面有一个discount方法,
在这里插入图片描述
新建了三个实体类去继承该接口,并实现discount方法,getUserType方法,关系如下图所示.

在这里插入图片描述
     这样,我们上面的代码就可以变成以下几行,把各自的实现策略封装到了类中,不用在一个方法中堆积几百行的业务逻辑代码,如下图所示.
在这里插入图片描述
        此时,我们将程序进行了简化,使代码变得易读,但是,我们其实还没有替换掉ifelse,还是需要进行判断,那么接下来应该怎么做呢?
       我们可以从Spring中得到启发,在我们使用Spring中,我们需要生成好多bean,然后在使用的时候注入进来,那么Spring是怎么做到的呢?它是靠ifelse判断的嘛?不是的,它是靠一个map来实现的,将所有的bean放入map中,需要的时候取出来即可.我们这里也参照实现
在这里插入图片描述
       如上代码所示,我们将所有的类对象放入到了一个map中,userType作为key,Object作为value,在需要的时候根据参数将对象取出,调用对应的方法即可.这样就实现了代替多个ifelse的效果,而且以后当增加需求时,我们只需新建一个类实现CulculateStrategy接口即可,关键代码则不需要改变.满足了程序的设计原则.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

打赏作者

程序员bling

义父,感谢支持

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

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

打赏作者

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

抵扣说明:

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

余额充值