重構優化if else

2021-10-09 14:47:13 字數 3559 閱讀 1524

背景說明:

隨著業務邏輯越來越多,if else也越來越長,所以就想重新優化一下,看了一下資料,寫了一點偽**,記錄一下自己的體會.

場景說明:

不同的支付型別對應不同的支付型別的業務處理邏輯.

1.直接使用if else處理業務邏輯:

public

static

void

main

(string[

] args)if(

"支付完成"

.equals

(paytype))if

("支付失敗"

.equals

(paytype)

)// 省略多餘的if else邏輯

}

2.策略模式+工廠方法重構if else

思路描述:構建支付型別業務處理介面,不同的支付型別實現該介面並重寫介面方法實現支付型別的具體處理邏輯;構建支付型別工廠,根據對應支付型別獲取支付型別業務處理介面實現類.

2.1構建支付型別介面

public

inte***ce

paytypehandleservice

2.2 根據不同的支付型別實現支付型別處理介面

public

class

readypayserviceimp

implements

paytypehandleservice

}

public

class

successpayserviceimp

implements

paytypehandleservice

}

public

class

failpayserviceimp

implements

paytypehandleservice

}

2.3構建支付型別工廠,根據不同的支付型別獲取不同的支付型別介面實現類

public

class

paystrategyfactory

// 根據不同的支付型別獲取對應的支付邏輯實現類

public

static paytypehandleservice getpayhandle

(string paytype)

}

2.4使用策略模式+工廠方法進行測試

public

static

void

main

(string[

] args)

補充:1.策略模式感覺和多型差差不多,父類引用指向子類物件;2.關於構建支付型別例項,可以做成列舉型別.

策略模式:定義了一組演算法,將每個演算法都封裝起來,並且使它們之間可以互換;乙個類的行為或其演算法可以在執行時更改,簡單來說就是對變化的引數執行對應的程式,我們會想到:if(…)else if(…){}… ,但if-else用的多了,程式可讀性和維護程度就大大下降。

列舉處理參考**:

public

enum paytypehandleenum

// 根據傳遞的型別獲取對應的實現類

public

static paytypehandleservice getpaytypehandleservice

(string paytype)

}return null;

}public

static

void

main

(string[

] args)

}

@target()

@retention

(retentionpolicy.runtime)

public @inte***ce

customerpaytype

支付介面:

public

inte***ce

payservice

三種支付實現類:

@component

@customerpaytype

( paytype =

"alipay"

)public

class

alipayservice

implements

payservice

}@component

@customerpaytype

( paytype =

)public

class

implements

payservice

}@component

@customerpaytype

( paytype =

"wechatpay"

)public

class

wechatpayservice

implements

payservice

}

支付處理邏輯:

@component

public

class

annotationpayhandle

implements

);}

// 根據支付型別執行對應的支付邏輯

public

void

executepaybyannotation

(string paytype)

}

測試類中進行測試:

@springboottest

class

}

public

inte***ce

payservice

支付實現類介面:

@component

public

class

alipayservice

implements

payservice

}@component

public

class

implements

payservice

}@component

public

class

wechatpayservice

implements

payservice

}

支付處理邏輯:

@component

public

class

beannamepayhandle

}

測試實現:

@springboottest

class

}

If Else 優化之道

每當看到乙個方法中有幾百行 裡面被層層的if else所包圍,我都感嘆,為什麼我們不能對if else優化一下呢?早些年,table很流行,搭建頁面框架比較簡單,但是慢慢人們發現層層的巢狀,卻並不利於 的閱讀,於是人們發明了div來代替table。if else儘管處理業務邏輯比較簡單,但是層層的巢...

策略模式優化大量if else

在 編寫的個過程中難免會碰到使用到if else的情況,太多的if else會使 變的臃腫並且難以理解,然後想到了之前寫策略模式是可以對它進行優化的,的規範和易懂性我認為對乙個優秀程式設計師來說是必要的。平常經常碰到的 author cjd description 使用if.else臃腫的 retu...

if else 優化之 策略模式

在策略模式 strategy pattern 中,乙個類的行為或其演算法可以在執行時更改。這種型別的設計模式屬於行為型模式。在策略模式中,我們建立表示各種策略的物件和乙個行為隨著策略物件改變而改變的 context 物件。策略物件改變 context 物件的執行演算法。業務處理主服務類 servic...