面向?qū)ο蟪绦虻囊粋€最明顯特征就是:少用switch(或case)語句。從本質(zhì)上說,switch語句的問題在于重復(fù)(duplication)。你常
會發(fā)現(xiàn)同樣的switch語句散布于不同地點。如果要為它添加一個新的case子句,你必須找到所有switch語句并修改它們。面向?qū)ο笾械亩鄳B(tài)
(ploymorphism)概念可為此帶來優(yōu)雅的解決辦法。
大多數(shù)時候,一看到switch語句你就應(yīng)該考慮以[多態(tài)]來替換它。問題是多態(tài)該出現(xiàn)在哪兒?switch語句常常根據(jù)type code(型別碼)進(jìn)行選擇,你要的是[與該type code相關(guān)的函數(shù)或class]。所以你應(yīng)該所用Extract Method(110)將switch語句提煉到一個獨立函數(shù)中,再以Move Method(142)將它搬移到需要多態(tài)性的那個class里頭。此時你必須決定是否使用Replace Type Code with Subclasses(223)或Replace Type Code with State/Strategy(227)。一旦這樣完成繼承結(jié)構(gòu)之后,你就可以運用Replace Conditional with Polymorphism(225)了。
如果你只要在單一函數(shù)中有些選擇事例,而你并不想改動它們,那么[多態(tài)]就有點殺雞用牛刀了。這種情況下Replace Parameter with Explicit Methods(285)是個不錯的選擇。如果你的選擇條件之一是null,可以試試Introduce Null Object(260)。