重構(gòu)壞味道:Switch驚悚現(xiàn)身

Switch Statement

癥狀

本來開心的想要添加或者修改現(xiàn)有功能突然發(fā)現(xiàn)代碼不知道從何下手,因為可能很多處switch 或者很多 if 關(guān)鍵字 ,你必須要搞明白哪個分支以及改之后的影響范圍以及會不會影響其它的分支。


Switch Statement

病因

項目之初程序員往往都是如何簡單如何寫,在有分支邏輯的時候確實switch or if 這種方式是最快速且便捷的,但是隨著程序功能的不斷迭代,代碼卻沒有跟上(一個分支可能擁有著一種對象的概念),導致后面功能又會出現(xiàn)新的switch,又或者switch分支的邏輯越寫越多,越寫越復雜.

導致的健康問題

如果想添加或者修改原有功能,由于邏輯在分支里,往往改一個地方不慎有可能會破壞其它的分支,又或者改了一個地方發(fā)現(xiàn)還有其它地方忘記了。這樣的話無形中增加了維護成本,以及提高了BUG的發(fā)生的概率.

治療

  • 如果看到一個條件表達式,它根據(jù)類型的不同而選擇不同的行為。

嘗試運用 Replace Conditional with Polymorphism 讓這些行為封裝到自己的條件對象中
IntelliJ IDEA 練習視頻

  • 有個類型碼,它會影響行為,但你無法通過繼承的方式消除它,或者類型碼的數(shù)值在對象的生命周期中發(fā)生變化。

嘗試運用 Replace Type Code with State/Strategy (以狀態(tài)/策略取代類型碼) 讓這些行為封裝到自己的條件對象中
IntelliJ IDEA 練習視頻

康復

當我想控制浴缸,我就直接去擰浴缸的開關(guān)了,而不需要在一個統(tǒng)一的控制中心中找到哪個是浴缸的開關(guān)。

Switch Statement After Refactoring

什么情況不治療

  • 當Switch控制的是很簡單的邏輯。
  • 有些設(shè)計模式必須存在Switch的例如工廠模式(Factory),抽象工廠模式(Abstract Factory)。
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容