重构——39以多态取代条件表达式(Replace Conditional with Polymorphism)
以多態(tài)取代條件表達(dá)式(Replace Conditional with Polymorphism)
你手上有個(gè)條件表達(dá)式,它根據(jù)對(duì)象類型的不同而選擇不同的行為;將這個(gè)條件表達(dá)式的每個(gè)分支放進(jìn)一個(gè)子類內(nèi)的覆寫(xiě)函數(shù)中,然后將原始的函數(shù)聲明為抽象函數(shù)
一、動(dòng)機(jī)
1、面向?qū)ο笮g(shù)語(yǔ)中,聽(tīng)上去最高貴的詞非多態(tài)莫屬
2、正因?yàn)橛辛硕鄳B(tài),所以你會(huì)發(fā)現(xiàn),類型碼的switch語(yǔ)句以及基于類型名稱的if-then-else語(yǔ)句在面向?qū)ο蟪绦蛑泻苌俪霈F(xiàn)
二、做法
1、Replace Type Code with Subclass,Replace Type Code with State/Strategy
2、如果要處理的條件表達(dá)式是一個(gè)更大函數(shù)的一部分,先Extract Method
3、如果有必要,使用Move Method將條件表達(dá)式放置到繼承結(jié)構(gòu)的頂端
4、任選一個(gè)子類,在其中建立一個(gè)函數(shù),使之覆寫(xiě)超類中容納條件表達(dá)式的那個(gè)函數(shù),將與該子類相關(guān)的條件表達(dá)式分支復(fù)制到新建函數(shù)中,并對(duì)它進(jìn)行適當(dāng)調(diào)整
5、為了順利進(jìn)行這一步驟,你可能需要將超類中的某些private字段聲明為protected
6、編譯,測(cè)試
7、在超類中刪掉條件表達(dá)式內(nèi)被復(fù)制的分支
8、編譯,測(cè)試
9、針對(duì)條件表達(dá)式的每個(gè)分支,重復(fù)上述過(guò)程,直到所有的分支都被移到子類內(nèi)的函數(shù)為止
10、將超類之中容納條件表達(dá)式的函數(shù)聲明為抽象函數(shù)
總結(jié)
以上是生活随笔為你收集整理的重构——39以多态取代条件表达式(Replace Conditional with Polymorphism)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: 《Spark快速大数据分析》—— 第三章
- 下一篇: shell脚本的exit问题(退出脚本还