if-else有大學(xué)問
if-else
switch
?
以上兩種是在開發(fā)過程中比較常用的,適用于代碼量小,邏輯簡(jiǎn)單。一旦代碼長(zhǎng)度偏長(zhǎng),邏輯復(fù)雜時(shí),閉眼都能想象,滿篇幅的if-else。一個(gè)是影響了可讀性,另一個(gè)改起來也特別費(fèi)勁,生怕動(dòng)一某個(gè)變量影響整個(gè)代碼塊的邏輯??删S護(hù)性低。
策略模式


策略模式在這里簡(jiǎn)單理解就是把 if語句里面的邏輯或switch語句中case里面的邏輯抽取出來,把它放到一個(gè)策略類中。這樣每個(gè)判斷都改成了一個(gè)類,需要修改的時(shí)候只要改對(duì)應(yīng)的類,不用擔(dān)心影響到其它的類的實(shí)現(xiàn)邏輯,方便維護(hù)。對(duì)于簡(jiǎn)單的邏輯其實(shí)沒必要搞得這么復(fù)雜,if-else幾行代碼就能解決??梢钥闯鲆坏┎呗灶惗嗔耍埠苈闊?。
函數(shù)式接口



函數(shù)式接口相對(duì)而言就比較折中,既不要擔(dān)心if-else中,改動(dòng)造成其它邏輯影響,代碼也不集中在一起,也會(huì)想策略模式中存在很多類文件。比較麻煩的是用了lambda表達(dá)式,jdk版本會(huì)影響,團(tuán)隊(duì)中也可能有些小伙伴不會(huì)。
在實(shí)際使用的過程中在函數(shù)式方法中業(yè)務(wù)邏輯復(fù)雜時(shí),也就是if語句塊業(yè)務(wù)復(fù)雜。常常把這部分抽取除獨(dú)立的業(yè)務(wù)Service。也常配合好策略類一起用。
總之,以上的每個(gè)方法行,都有一定的優(yōu)缺點(diǎn),if-else都能讓人玩出花來,程序員要努力!