天天看點

幹掉 if else!

if…else控制語句,如果代碼裡濫用會大大降低代碼的可讀性、可維護性、可擴充性以及靈活性,進而使整個軟體系統造成危害。因為在實際的項目中,需求往往是不斷變化的,新需求也層出不窮,是以違反了違反單一職責原則和開閉原則,而且有些公司的代碼審查會通不過。

是以,if else的替代方案是很有必要的,如位語句,枚舉,工廠模式,政策模式,狀态模式等等。這裡用一個場景詳細說明if else的替代方案,大家用支付寶付款的時候,會有多種付款方式,如餘額,花呗,餘額寶,信用卡,銀行卡。

01. 傳統的方式

枚舉第一種

(1)面向接口程式設計,首先定義一個支付接口

(2)定義一個具體的支付寶餘額實作

(3)定義一個具體的支付寶花呗實作

(4)定義一個具體的支付寶餘額寶實作

(5)定義一個枚舉類

(6)用戶端

(7)結果:

幹掉 if else!

(8)總結:完全消除了if else

(1) 面向接口程式設計,首先定義一個支付接口

(2)定義一個枚舉類,并且實作支付接口

(3)用戶端代碼

(4)結果:

幹掉 if else!

(5)總結:

根據業務場景,如果代碼業務量少,可以用枚舉第二種,如果代碼業務量大,可以用枚舉第一種。都可以解決if else代碼。

02. 工廠模式

結果:

幹掉 if else!

03. 政策模式+工廠模式

政策模式一句話就是,定義一系列算法,把他們封裝起來,并且使它們可以互相替換。具體來說就說,定義多個政策對象,每個政策對象裡面封裝好多種算法,再定義一個上下文對象,該上下文對象負責根據傳入不同的政策對象,執行不同的行為。

(1)定義一個抽象的公共政策接口strategy,通常為接口,定義每個政策或算法必須具有的方法和屬性。

(2)定義一個context對象,即扮演一個上下的文角色,起承上啟下的封裝作用,其行為随着政策對象改變而改變。

(3)定義一個具體的餘額支付政策

(4)定義一個具體的花呗支付政策

(5)定義一個具體的餘額寶支付政策

幹掉 if else!

此時隻有政策模式,還沒有加入工廠模式

(8)定義一個政策工廠類

(9)再看用戶端代碼

運作結果還是一樣的就不看了哈

狀态模式一句話來說就是,允許一個對象在其對象内部狀态改變時改變它的行為。具體來講,定義多種狀态對象,和定義一個行為随着狀态對象改變而改變的 context 對象。

(1)面向接口程式設計,定義一個支付接口

(2)定義一個context上下文

(2)定義具體的狀态類

(3)用戶端

幹掉 if else!

此時僅僅是狀态模式,沒有徹底取消if else

(5)加入工廠模式

(6)再看用戶端代碼

總結:完全解決了代碼中的 if else,本文作者:王德印