0
  • 聊天消息
  • 系统消息
  • 评论与回复
登录后你可以
  • 下载海量资料
  • 学习在线课程
  • 观看技术视频
  • 写文章/发帖/加入社区
创作中心

完善资料让更多小伙伴认识你,还能领取20积分哦,立即完善>

3天内不再提示

解锁新姿势:干掉过多的if-else!

Android编程精选 来源:CSDN 作者:饭一碗 2022-11-12 10:01 次阅读

场景

日常开发,if-else语句写的不少吧??当逻辑分支非常多的时候,if-else套了一层又一层,虽然业务功能倒是实现了,但是看起来是真的很不优雅,尤其是对于我这种有强迫症的程序"猿",看到这么多if-else,脑袋瓜子就嗡嗡的,总想着解锁新姿势:干掉过多的if-else!!!

本文将介绍三板斧手段:

优先判断条件,条件不满足的,逻辑及时中断返回;

融入策略模式;

策略模式+工厂+单例模式,锦上添花;

接下来先附上一段很久以前自己写的业务代码,核心逻辑就是在支付回调中根据用户购买的价格包赋予用户对应的权益(VIP视频会员天数+抽奖机会次数)。

我的天,太多if-else了……(看不清楚可以点击图片放大)

ace07e42-61c0-11ed-8abf-dac502259ad0.png

1、优先判断条件,不满足及时中断

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

ad3aa1c4-61c0-11ed-8abf-dac502259ad0.pngad65e47e-61c0-11ed-8abf-dac502259ad0.png

2、策略模式改造

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

ad8555b6-61c0-11ed-8abf-dac502259ad0.pngad9c4b22-61c0-11ed-8abf-dac502259ad0.pngadadb4fc-61c0-11ed-8abf-dac502259ad0.pngadbfe0f0-61c0-11ed-8abf-dac502259ad0.pngadd997c0-61c0-11ed-8abf-dac502259ad0.png

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

ade6bdec-61c0-11ed-8abf-dac502259ad0.png

3、策略模式+工厂+单例模式,锦上添花

接下来使用"工厂类+单例"来给代码加点料:

ae0104e0-61c0-11ed-8abf-dac502259ad0.pngae2d21a6-61c0-11ed-8abf-dac502259ad0.png






审核编辑:刘清

声明:本文内容及配图由入驻作者撰写或者入驻合作网站授权转载。文章观点仅代表作者本人,不代表电子发烧友网立场。文章及其配图仅供工程师学习之用,如有内容侵权或者其他违规问题,请联系本站处理。 举报投诉
  • 中断
    +关注

    关注

    5

    文章

    884

    浏览量

    41030

原文标题:三种新姿势:帮你干掉过多的if-else

文章出处:【微信号:AndroidPush,微信公众号:Android编程精选】欢迎添加关注!文章转载请注明出处。

收藏 人收藏

    评论

    相关推荐

    十个精选优质直播,工程师们最喜欢看哪一个?

    开启工程师学习之旅,解锁学习新姿势,赢取开开学奖励
    的头像 发表于 02-27 17:56 0次阅读

    C语言中if语句、if-else语句和switch语句详解

    在C语言中,有三种条件判断结构:if语句、if-else语句和switch语句。
    发表于 08-18 16:36 1018次阅读
    C语言中if语句、<b class='flag-5'>if-else</b>语句和switch语句详解

    炼狱传奇-if_else与case之战

    Verilog HDL语言中存在两种分支语言:● if-else 条件分支语句● case 分支控制语句1. if-else条件分支语句if-else 条件分支语句的作用是根据指定的判断条件是否满足
    发表于 03-31 09:51

    解锁了这些姿势!你就可以嘿!嘿!嘿!

    ”公众号,并且下载“电子发烧友”APP,截图带微信号回本帖! 解锁上方任意姿势的小伙伴们,赶紧扫描下方的二维码,发送你的论坛用户名验证进群哦!活动时间:2016-1-25—2016-2-1红包发多少?看
    发表于 01-25 13:55

    解锁新姿势 | 如何用配置中心实现全局动态流控?

    {if (rcvIntervalTimeLeft >= 100) {rcvIntervalTimeLeft -= 100;Thread.sleep(100);} else {Thread.sleep
    发表于 01-24 16:41

    Proteus之if-else语句的应用

    Proteus之if-else语句的应用,很好的Proteus资料,快来学习吧。
    发表于 04-18 14:49 0次下载

    FPGA学习系列:if-else与case

    设计背景:不管是在什么软件和硬件语言,我们在我们的代码中都或多或少的用到这两条语句,if..else与case语句,今天我们将学习verilog中的这两条语句,其实不管在什么语言中这两个语句都是一样
    的头像 发表于 06-01 16:59 1.1w次阅读
    FPGA学习系列:<b class='flag-5'>if-else</b>与case

    移动4G网络,开启看世界杯直播新姿势

    江苏移动4G网络对南通近海海域60公里实现了4G网络连续覆盖,为球迷开启看世界杯直播新姿势
    发表于 06-25 11:30 1680次阅读

    从入门到高级替换If-Else的5种方法示例

    本文并不肯定或者否定哪一种写法,仅仅为大家提供一些其他的编码思路或者一些值得借鉴的点子。 设计更好的软件,替换 If-Else 的 5 种方法,从入门到高级示例 If-Else 通常是一个糟糕的选择
    的头像 发表于 02-20 16:27 6290次阅读
    从入门到高级替换<b class='flag-5'>If-Else</b>的5种方法示例

    不会有人不知道怎么优雅的替换if-else语句吧

    又一层,虽然业务功能倒是实现了,但是看起来是真的很不优雅,尤其是对于我这种有强迫症的程序“猿”,看到这么多if-else,脑袋瓜子就嗡嗡的,总想着解锁新姿势干掉过多
    的头像 发表于 07-28 15:46 1211次阅读
    不会有人不知道怎么优雅的替换<b class='flag-5'>if-else</b>语句吧

    关于Python中的“for-else”功能

    无论使用哪种编程语言,我们都会编写“if-else”语句,但是“for-else”呢?
    发表于 09-26 14:44 465次阅读

    什么是SystemVerilog-决策语句-if-else语句?

    决策语句(Decision statements)允许程序块的执行流程根据设计中信号的当前值分支到特定语句。SystemVerilog有两个主要的决策语句:if…else语句和case语句,使用关键字case、case…inside,casex和casez。
    的头像 发表于 02-09 14:15 680次阅读
    什么是SystemVerilog-决策语句-<b class='flag-5'>if-else</b>语句?

    代码如何优化掉多余的if/else?

    ;} 其实,每次看到上面这种代码,我都心里抓痒,完全可以先判断 !condition ,干掉 else。 if (!condition) { return xxx;} // do s
    的头像 发表于 06-22 10:01 484次阅读
    代码如何优化掉多余的if/<b class='flag-5'>else</b>?

    如何通过策略模式简化if-else

    相信大家日常开发中会经常写各种分支判断语句,比如 if-else ,当分支较多时,代码看着会比较臃肿,那么如何优化呢? 1、什么是策略模式? Define a family
    的头像 发表于 10-08 16:08 271次阅读
    如何通过策略模式简化<b class='flag-5'>if-else</b>

    Verilog代码:if-else和case的电路结构和区别

    每个if-else就是一个2选1mux器。当信号有明显优先级时,首先要考虑if-else,但是if嵌套过多也会导致速度变慢;if语句结构较慢,但占用面积小。 嵌套的if语句如果使用不当,就会
    的头像 发表于 11-29 15:10 769次阅读