三种方式,教你优雅的替换if-else语句!
Posted Hollis Chuang
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了三种方式,教你优雅的替换if-else语句!相关的知识,希望对你有一定的参考价值。
来源:love1024.blog.csdn.net/article/details/104955363
场景
日常开发,if-else语句写的不少吧??当逻辑分支非常多的时候,if-else套了一层又一层,虽然业务功能倒是实现了,但是看起来是真的很不优雅,尤其是对于我这种有强迫症的程序"猿",看到这么多if-else,脑袋瓜子就嗡嗡的,总想着解锁新姿势:干掉过多的if-else!!!
本文将介绍三板斧手段:
优先判断条件,条件不满足的,逻辑及时中断返回;
融入策略模式;
策略模式+工厂+单例模式,锦上添花;
接下来先附上一段很久以前自己写的业务代码,核心逻辑就是在支付回调中根据用户购买的价格包赋予用户对应的权益(VIP视频会员天数+抽奖机会次数)。
我的天,太多if-else了……(看不清楚可以点击图片放大)

1.优先判断条件,不满足及时中断
这点非常容易理解,就是说在业务逻辑里面,先把不符合条件的给先过滤掉,而不是层层嵌套if-else判断,结合代码图看一下:


2.策略模式改造
先用策略模式替换掉文章开头讲到的,用户充值后根据价格包(付的多少钱)给用户增加VIP天数及抽检机会次数的逻辑,我这里就简化成"根据-价格包区分给用户增加不同的体育会员视频VIP天数"这个动作来讲解:





表面上看,代码稍微优雅了点,但是还是没和if-else彻底说拜拜,且recharge()
充值方法可单独拎出来,只需要根据priceCode实例化不同的策略对象即可:

3.策略模式+工厂+单例模式,锦上添花
接下来使用"工厂类+单例"来给代码加点料:



福利时间
GIFT TIME
送书环节又来了
感谢大家一直以来的陪伴与支持
今天给大家赠送5本书
由博文视点赞助
▊《微服务架构深度解析:原理、实践与进阶》
王佩华 著
十多年经验集大成
从分布式到微服务,从SpringBoot到SpringCloud各组件,从Docker到Kubernetes,从领域驱动设计到响应式编程和云原生
本书从微服务架构的设计理念和方法论切入,从不同角度全面介绍微服务特性、使用场景、组织流程、构建交互、部署交付等软件工程各个关键环节和核心要素,既包含了具体微服务技术的源码解读、原理分析,也加入了作者在电信、金融领域积累的真实案例和实践经验。
本书不仅适合初学者深入理解微服务架构,也可以作为团队管理者或者架构师进阶微服务架构的技术参考手册。
本次送书不需要评论,也不需要转发
采用最公平的抽奖方式。
关注公众号:了不起的程序员
公众号后台回复:送书
即可参与抽奖
以上是关于三种方式,教你优雅的替换if-else语句!的主要内容,如果未能解决你的问题,请参考以下文章