使用策略模式消除if else

2021-09-12 12:56:28 字數 1450 閱讀 2556

最近專案中遇到如下情況:

有乙個操作叫平帳,然後要對多個不同的款項進行平帳,目測有72種。

然後平帳的方法只有乙個,在那個平帳方法裡面,判斷是哪一種款項,然後不同的款項有不同的處理邏輯。

if(款項a)

if(款項b)

if(款項c)

這個就很可怕了。

因此使用策略模式來消除掉if else。

先看使用策略模式之後的**

輸出結果

直接通過同乙個dohandler方法根據不同的tag去選擇處理不同的邏輯

具體邏輯就是:

定乙個handler介面,然後各個處理邏輯去實現這個handler介面。

然後定乙個client類,這個類裡面定義dohandler方法。

當client類初始化的時候,自動將所有的handler類載入到自己的map列表裡面,key為對應邏輯的tag。

當呼叫client的dohandler的方法時候,傳入tag,根據tag從map裡面找到對應的handler實現類物件。

先看client類

}再來看定義的handler介面

process為處理方法,gettype為獲取ta g的方法。 用來在client裡面獲區分每個handler實體

最後是兩個實現類

這樣,外面只需要呼叫statementclient這個類的dohandler方法傳入對應的ta g就行了,裡面會自行根據ta g找對應的方法,而不需要if else

策略模式 Spring消除if else

為了消除if else 最近想把訊息服務的幾種下發方式通過策略模式整理一下,因為用的spring,直接上 public inte ce imessageservice component public class iemailserviceimpl implements imessageservic...

用設計模式消除大量if else

先來看張經典的啊都給神圖,感受下大量if else的 魅力 有時候業務上的拖拉可能要求我去寫出如上的多層if else巢狀 如果你碰上了乙個對團隊成員要求相對比較嚴格的主管的話,那麼恭喜你,死定了 脾氣比較爆的大佬可能直接就跟你說要麼解決上面問題,要麼收拾包袱滾蛋了。public class cof...

策略模式 工廠模式優化if else

2.優化if else 思路描述 構建支付型別業務處理介面,不同的支付型別實現該介面並重寫介面方法實現支付型別的具體處理邏輯 構建支付型別工廠,根據對應支付型別獲取支付型別業務處理介面實現類.2.1構建支付型別介面 public inte ce paytypehandleservice2.2 根據不...