策略模式優化大量if else

2021-09-03 07:31:59 字數 1363 閱讀 8982

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

平常經常碰到的**:

/**

* @author : cjd

* @description : 使用if...else臃腫的**

* @return :void

* @date : 10:07 2018/12/17

*/@org.junit.test

public void test1() else if ("blue".equals(color)) else if ("red".equals(color))

}

這種情況下如果只是少數並且鑲套不多的**還可以容易理解,但是每當要新增新的else,**就會變得臃腫並且要修改已有的**,這就違背了對修改關閉對擴充套件開放的設計原則,這種情況下就引出了策略模式。

參考

那麼如何修改**使if-else減少呢?

我們可以把每一段else中的語句當做是乙個方法。

為每乙個要拿來做判斷的條件建乙個類來實現乙個方法。

為了使擴充套件開放,我們將方法抽象為介面,並讓類實現

inte***ce color
/**

* @author : cjd

* @description : 將if中的具體實現放入介面實現類中

* @date : 10:22 2018/12/17

*/class black implements color

}class red implements color

}

並定義乙個策略類來呼叫方法

/**

* @author : cjd

* @description : 策略模式,根據傳入的類判斷執行的方法

* @date : 10:22 2018/12/17

*/class colorstrategy

void getcolor()

}

使用策略模式優化後的**如下

@org.junit.test

public void test2()

這樣一來哪怕以後增加更多的else也只是新建乙個類,通過類的增加來維護**的易懂性,同樣通過策略模式也能很好的避免多重鑲套的if-else。

當然,除了策略模式也有其他方式可以優化的

參考

if else 優化之 策略模式

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

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

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

js利用策略模式優化if else迴圈

js程式中最常用的if else迴圈,如果分枝很多的的情況下難免使寫出的程式又臭又長,但是根據需求又必須將這些分支處理,此時稍有經驗的程式設計師可能會想到用switch case優化但是只是僅僅做到利於閱讀,最好的方法是用策略模式進行優化。例如 有五個物件 obj1 obj5 然後需要判斷每個物件的...