日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當(dāng)前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

If语句:你们到底想把我放到哪儿?

發(fā)布時(shí)間:2025/3/21 编程问答 16 豆豆
生活随笔 收集整理的這篇文章主要介紹了 If语句:你们到底想把我放到哪儿? 小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,幫大家做個(gè)參考.

本文轉(zhuǎn)載自?碼農(nóng)翻身?

順序、循環(huán)、分支,是你們所說的程序的三個(gè)基本元素。

我就是你們最常用的分支,名字叫做if語句。

今天上午,菜鳥張大胖寫了一段代碼:

public?class?Customer{private?int?type;......void?validate(){if?(type?==?Employee){//針對內(nèi)部員工做處理}else?if(type?==?Partner){//如果是合作伙伴,做另外的處理}?????????} }

看到我沒有? 在那個(gè)validate函數(shù)中, ? if ...... else if ,那就是我。

張大胖寫這段代碼的時(shí)候其實(shí)猶豫了一下, 因?yàn)樗?lián)想到之前看到的面向?qū)ο蟮奈恼?#xff1a;?出現(xiàn)了if語句, 可以用多態(tài)來消除。

這里要不要試用多態(tài)呢?

他把疑惑給師傅Bill講了一下, Bill說道:“暫時(shí)不用,這里的邏輯太簡單了,用if else 就可以搞定,使用多態(tài)完全是多此一舉!”

到了下午,菜鳥張大胖寫了一個(gè)新函數(shù):?getDiscount(), 把我if ...else if 又寫了一遍:

這一次,張大胖心里打鼓了: 同樣的if語句在新的方法中又出現(xiàn)了,如果再增加新的方法,if語句還會重復(fù) !

Bill也在一旁幫腔: 是時(shí)候用多態(tài)了。

于是張大胖定義了一個(gè)抽象類,然后讓兩個(gè)新的子類去繼承,就把我從類中給徹底移除了:

public?abstract?class?Customer{abstract?void?validate();abstract?float?getDiscount();...... } public?class?Employee?extends?Customer{void?validate(){//對員工類型的Customer做處理}float??getDiscount(){//對員工類型的Customer做處理} }public?class?Partner?extends?Customer{void?validate(){//對合作伙伴做處理}float??getDiscount(){//對合作伙伴做處理} }

我很生氣,這些代碼中連一個(gè)If 都沒有,業(yè)務(wù)邏輯都被分散到了各個(gè)具體的類中去了!

可是我轉(zhuǎn)念一想: 雖然在Customer中消除了if語句,可是你總得創(chuàng)建具體的Customer對象吧! 創(chuàng)建的時(shí)候不還得使用If else ?

果然, 在OrderProcessor這個(gè)類中, 張大胖寫下了下面的代碼:

我哈哈大笑,我只是從Customer類被轉(zhuǎn)移了到了OrderProcessor類而已,現(xiàn)在的代碼更加凌亂了。

Bill 大驚:“大胖,可不能這么做啊,這么做重復(fù)代碼更要命了,如果增加一個(gè)新的Customer的子類, 那得改多少地方啊!”

張大胖說:“那我把這些可惡的If 移到哪里去?”

“我們要提倡把對象和對象的創(chuàng)建分開!?對象只負(fù)責(zé)業(yè)務(wù)邏輯,對象的創(chuàng)建由factory, builder這些類來完成?!?/p> public?Customer?createCustomer(int?type,String?id){if(type?==?Employee){return?new?Employee(id);}???if(type?==?Parnter){return?new?Partner(id);}...... }

Bill這個(gè)辦法好厲害,一下子就把我集中關(guān)到了“工廠”小黑屋,無法分散到個(gè)各類了。

“奧,這就是設(shè)計(jì)模式中的簡單工廠吧!原來集中式創(chuàng)建對象,好處很大啊!” 張大胖恍然大悟。

“不過,” 張大胖開始舉一反三,“如果對象之間的依賴關(guān)系很復(fù)雜呢? 比如A依賴B, B依賴C..... ?用factory的方式寫起來也很麻煩啊!”??

“你想想,能不能用聲明式的方式來描述這種依賴關(guān)系,然后由某個(gè)程序自動地把這些對象給裝配好?” Bill開始循循善誘。?

我覺得大事不好,他們要把我放到某個(gè)通用的程序中去了。

“明白了,我們用的Spring就起到了這個(gè)作用,?在Spring當(dāng)中,只要用聲明的方式表達(dá)對象之間的依賴,什么構(gòu)造器注入,setter方法注入,autowired等等, 然后Spring就可以自動把這些對象給裝配起來,供我們使用,就不用擔(dān)心創(chuàng)建對象的問題了。 ” 張大胖突然頓悟Spring的一個(gè)重大作用,喜不自勝。

Spring接管了對象的創(chuàng)建,不用在應(yīng)用代碼中寫if語句創(chuàng)建對象了,但是在業(yè)務(wù)邏輯中,if語句還是跑不掉的,我下次再說說發(fā)生在那里的故事吧。

后記1:多態(tài)雖然好用,但也不能濫用!

后記2:本文受到這個(gè)視頻的啟發(fā)而寫:https://www.youtube.com/watch?v=4F72VULWFvc

總結(jié)

以上是生活随笔為你收集整理的If语句:你们到底想把我放到哪儿?的全部內(nèi)容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網(wǎng)站內(nèi)容還不錯(cuò),歡迎將生活随笔推薦給好友。