设计模式处理 if-else 语句
点击上方 蓝字 关注我们!
2021 最新 Java 编程资料免费领!Java 视频教程,Java Web 项目教程,互联网Java 面试真题 / 算法题,简历模板,Linux 服务器等等,点击领取!
来源:love1024.blog.csdn.net/
article/details/104955363
场景 1.优先判断条件,不满足及时中断 2.策略模式改造 3.策略模式+工厂+单例模式,锦上添花
场景
日常开发,if-else语句写的不少吧??当逻辑分支非常多的时候,if-else套了一层又一层,虽然业务功能倒是实现了,但是看起来是真的很不优雅,尤其是对于我这种有强迫症的程序"猿",看到这么多if-else,脑袋瓜子就嗡嗡的,总想着解锁新姿势:干掉过多的if-else!!!
本文将介绍三板斧手段:
优先判断条件,条件不满足的,逻辑及时中断返回; 融入策略模式; 策略模式+工厂+单例模式,锦上添花;
接下来先附上一段很久以前自己写的业务代码,核心逻辑就是在支付回调中根据用户购买的价格包赋予用户对应的权益(VIP视频会员天数+抽奖机会次数)。
我的天,太多if-else了……(看不清楚可以点击图片放大)
![](https://filescdn.proginn.com/62bbdf7b59b6ed95f908c9779cea7bf3/4ff4f069731596ff3442fe449d6ffb34.webp)
1.优先判断条件,不满足及时中断
这点非常容易理解,就是说在业务逻辑里面,先把不符合条件的给先过滤掉,而不是层层嵌套if-else判断,结合代码图看一下:
![](https://filescdn.proginn.com/32219f94c2782eb9ba9ca2d5a2fe3f8f/e975b60cd7cb6d7c56d28789abe5a732.webp)
![](https://filescdn.proginn.com/f890ca2258428a3128f59cb4c75ab658/790457d97c09ac8f06ff47f91133d31d.webp)
2.策略模式改造
先用策略模式,替换掉文章开头讲到的,用户充值后根据价格包(付的多少钱)给用户增加VIP天数及抽检机会次数的逻辑,我这里就简化成"根据-价格包区分给用户增加不同的体育会员视频VIP天数"这个动作来讲解:
![](https://filescdn.proginn.com/1089a8f2ef5c098254c51c228567e131/834be9f81e1d171d0ccf008db5b04235.webp)
![](https://filescdn.proginn.com/f2725665dc6f536e2ecb99c516e8874b/b5d4d70c87b5e8e89bd0737793e8498f.webp)
![](https://filescdn.proginn.com/a5cebbae5630ea0bac95a01a14b3ea0e/064bdde0390ceffe51295bc504687027.webp)
![](https://filescdn.proginn.com/4dae9e57a65f6ad236ddfc8174a82ecc/5c558866e3b8694317c558539f093e7b.webp)
![](https://filescdn.proginn.com/7bb79bbcd7eb64fb8b7a40864ae74a02/67cb0e0b819bd46900cbf2c282d3b66e.webp)
表面上看,代码稍微优雅了点,但是还是没和if-else彻底说拜拜,且recharge()
充值方法可单独拎出来,只需要根据priceCode实例化不同的策略对象即可:
![](https://filescdn.proginn.com/e558ef840e6f26ebb2aa77b4b08d6ced/72cd7a44132955367764b68174b9b8e4.webp)
3.策略模式+工厂+单例模式,锦上添花
接下来使用"工厂类+单例"来给代码加点料:
![](https://filescdn.proginn.com/e5a5cb0f72c322f780f52b611b3cca96/e400402862d798b5bd49e29f8b12235a.webp)
![](https://filescdn.proginn.com/4cc3d07df2845dd40c28b88e094c5d36/6c9ff10e8127994669a989ecdbefb229.webp)
![](https://filescdn.proginn.com/a9feb7d9e66816684163b85b5c2083b1/6f3a7c12544d13ee864a44c5b6f97a5d.webp)
往期推荐
END
若觉得文章对你有帮助,随手转发分享,也是我们继续更新的动力。
长按二维码,扫扫关注哦
✬「C语言中文网」官方公众号,关注手机阅读教程 ✬
评论