0
  • 聊天消息
  • 系統(tǒng)消息
  • 評(píng)論與回復(fù)
登錄后你可以
  • 下載海量資料
  • 學(xué)習(xí)在線課程
  • 觀看技術(shù)視頻
  • 寫(xiě)文章/發(fā)帖/加入社區(qū)
會(huì)員中心
創(chuàng)作中心

完善資料讓更多小伙伴認(rèn)識(shí)你,還能領(lǐng)取20積分哦,立即完善>

3天內(nèi)不再提示

不會(huì)有人不知道怎么優(yōu)雅的替換if-else語(yǔ)句吧

5jek_harmonyos ? 來(lái)源:CSDN ? 作者:飯一碗 ? 2021-07-28 15:46 ? 次閱讀

來(lái)自:love1024.blog.csdn.net/article/details/104955363

場(chǎng)景日常開(kāi)發(fā),if-else語(yǔ)句寫(xiě)的不少吧??當(dāng)邏輯分支非常多的時(shí)候,if-else套了一層又一層,雖然業(yè)務(wù)功能倒是實(shí)現(xiàn)了,但是看起來(lái)是真的很不優(yōu)雅,尤其是對(duì)于我這種有強(qiáng)迫癥的程序“猿”,看到這么多if-else,腦袋瓜子就嗡嗡的,總想著解鎖新姿勢(shì):干掉過(guò)多的if-else?。?!本文將介紹三板斧手段:

優(yōu)先判斷條件,條件不滿足的,邏輯及時(shí)中斷返回;

融入策略模式;

策略模式+工廠+單例模式,錦上添花;

接下來(lái)先附上一段很久以前自己寫(xiě)的業(yè)務(wù)代碼,核心邏輯就是在支付回調(diào)中根據(jù)用戶購(gòu)買的價(jià)格包賦予用戶對(duì)應(yīng)的權(quán)益(VIP視頻會(huì)員天數(shù)+抽獎(jiǎng)機(jī)會(huì)次數(shù))。我的天,太多if-else了……(看不清楚可以點(diǎn)擊圖片放大)

b20b1b9e-ecdb-11eb-a97a-12bb97331649.png

1.優(yōu)先判斷條件,不滿足及時(shí)中斷

這點(diǎn)非常容易理解,就是說(shuō)在業(yè)務(wù)邏輯里面,先把不符合條件的給先過(guò)濾掉,而不是層層嵌套if-else判斷,結(jié)合代碼圖看一下:

b493bb28-ecdb-11eb-a97a-12bb97331649.png

b51b978c-ecdb-11eb-a97a-12bb97331649.png

2.策略模式改造

先用策略模式替換掉文章開(kāi)頭講到的,用戶充值后根據(jù)價(jià)格包(付的多少錢)給用戶增加VIP天數(shù)及抽檢機(jī)會(huì)次數(shù)的邏輯,我這里就簡(jiǎn)化成“根據(jù)-價(jià)格包區(qū)分給用戶增加不同的體育會(huì)員視頻VIP天數(shù)”這個(gè)動(dòng)作來(lái)講解:

b52a462e-ecdb-11eb-a97a-12bb97331649.png

b83ace38-ecdb-11eb-a97a-12bb97331649.png

b8500ce4-ecdb-11eb-a97a-12bb97331649.png

b85e8ff8-ecdb-11eb-a97a-12bb97331649.png

b87995dc-ecdb-11eb-a97a-12bb97331649.png

表面上看,代碼稍微優(yōu)雅了點(diǎn),但是還是沒(méi)和if-else徹底說(shuō)拜拜,且recharge()充值方法可單獨(dú)拎出來(lái),只需要根據(jù)priceCode實(shí)例化不同的策略對(duì)象即可:

b898b7d2-ecdb-11eb-a97a-12bb97331649.png

3.策略模式+工廠+單例模式,錦上添花

接下來(lái)使用“工廠類+單例”來(lái)給代碼加點(diǎn)料:

b8a4a240-ecdb-11eb-a97a-12bb97331649.png

b8d5258c-ecdb-11eb-a97a-12bb97331649.png

編輯:jq

聲明:本文內(nèi)容及配圖由入駐作者撰寫(xiě)或者入駐合作網(wǎng)站授權(quán)轉(zhuǎn)載。文章觀點(diǎn)僅代表作者本人,不代表電子發(fā)燒友網(wǎng)立場(chǎng)。文章及其配圖僅供工程師學(xué)習(xí)之用,如有內(nèi)容侵權(quán)或者其他違規(guī)問(wèn)題,請(qǐng)聯(lián)系本站處理。 舉報(bào)投訴
  • 開(kāi)發(fā)
    +關(guān)注

    關(guān)注

    0

    文章

    357

    瀏覽量

    40734

原文標(biāo)題:三種方式,教你優(yōu)雅的替換if-else語(yǔ)句!

文章出處:【微信號(hào):harmonyos_developer,微信公眾號(hào):harmonyos_developer】歡迎添加關(guān)注!文章轉(zhuǎn)載請(qǐng)注明出處。

收藏 人收藏

    評(píng)論

    相關(guān)推薦

    差分儀表運(yùn)放的電阻電容混接會(huì)不會(huì)有問(wèn)題?

    我的電路如上圖所示,輸入端由外部接入,不接時(shí)就是懸空。 1)兩個(gè)1M電阻用于輸入懸空時(shí)保證輸出為0附近; 2)電容用作濾波退藕。 請(qǐng)問(wèn)電阻電容這么混接會(huì)不會(huì)有問(wèn)題,例如振蕩啥的?(外部輸入信號(hào)為直流。)
    發(fā)表于 09-10 08:23

    ESP32會(huì)不會(huì)有多線程問(wèn)題,需要加鎖嗎?

    ESP32會(huì)不會(huì)有多線程問(wèn)題,需要加鎖嗎
    發(fā)表于 07-19 08:05

    不會(huì)吧有人不知道壓力表的工作原理!

    壓力表
    jzyb
    發(fā)布于 :2024年07月01日 10:15:19

    不會(huì)吧!熱電偶是什么還有人不知道

    熱電偶
    華泰天科
    發(fā)布于 :2024年06月29日 11:04:50

    不會(huì)吧! 還有人不知道電磁流量計(jì)的安裝方式

    電磁流量計(jì)
    華泰天科
    發(fā)布于 :2024年06月13日 09:17:58

    不會(huì)吧有人不知道超聲波流量計(jì)的注意事項(xiàng)

    流量計(jì)
    華泰天科
    發(fā)布于 :2024年06月06日 10:24:01

    大無(wú)語(yǔ)事件!還有人不知道什么是電容料位計(jì)

    料位計(jì)
    jzyb
    發(fā)布于 :2024年05月24日 10:46:14

    輥壓機(jī)軸承位磨損修復(fù)你不知道的那些事

    電子發(fā)燒友網(wǎng)站提供《輥壓機(jī)軸承位磨損修復(fù)你不知道的那些事.docx》資料免費(fèi)下載
    發(fā)表于 03-12 15:10 ?0次下載

    7種MOSFET柵極電路的常見(jiàn)作用,不看不知道!

    7種MOSFET柵極電路的常見(jiàn)作用,不看不知道
    的頭像 發(fā)表于 12-15 09:46 ?1464次閱讀
    7種MOSFET柵極電路的常見(jiàn)作用,不看<b class='flag-5'>不知道</b>!

    揭秘pcb是什么物質(zhì):你不知道的“化學(xué)戰(zhàn)士”

    揭秘pcb是什么物質(zhì):你不知道的“化學(xué)戰(zhàn)士”
    的頭像 發(fā)表于 12-14 10:27 ?787次閱讀

    Verilog代碼:if-else和case的電路結(jié)構(gòu)和區(qū)別

    每個(gè)if-else就是一個(gè)2選1mux器。當(dāng)信號(hào)有明顯優(yōu)先級(jí)時(shí),首先要考慮if-else,但是if嵌套過(guò)多也會(huì)導(dǎo)致速度變慢;if語(yǔ)句結(jié)構(gòu)較慢,但占用面積小。 嵌套的if語(yǔ)句如果使
    的頭像 發(fā)表于 11-29 15:10 ?2055次閱讀

    不知道的FPC,它的發(fā)展史竟然是這樣的!

    不知道的FPC,它的發(fā)展史竟然是這樣的!
    的頭像 發(fā)表于 11-15 10:48 ?847次閱讀

    如何通過(guò)策略模式簡(jiǎn)化if-else

    相信大家日常開(kāi)發(fā)中會(huì)經(jīng)常寫(xiě)各種分支判斷語(yǔ)句,比如 if-else ,當(dāng)分支較多時(shí),代碼看著會(huì)比較臃腫,那么如何優(yōu)化呢? 1、什么是策略模式? Define a family
    的頭像 發(fā)表于 10-08 16:08 ?580次閱讀
    如何通過(guò)策略模式簡(jiǎn)化<b class='flag-5'>if-else</b>