使用多型代替條件判斷

2021-07-03 23:09:14 字數 2048 閱讀 3544

摘要:由於最近在做重構的專案,所以對重構又重新進行了一遍學習和整理,對31天重構最早接觸是在2023年 10月份,所以是在國外的社群上閒逛的時候鏈結過去的。記得當時一口氣看完了整個系列並沒有多少感覺,因為這些基本上專案都在使用,只是我們沒有專門把它標示和整理出來,所以也沒有引起多大的重視。現在突然接手這個重構專案,由於團隊成員技術和經驗參差不齊,所以有必要專門整理乙個重構的綱要,當然這個系列也非常適合做新系統的**規範參考,只要有**的地方,這個重構規範就很有價值。週末也不想出去閒逛,因為在剛到這個美麗的城市,沒有親戚或者朋友,所以才能靜下心來兩天時間寫完這個重構參考規範。同時也感受了windows live writer寫文章的快感。當然重構的整體架構得另當別論(整體架構在我的這篇文章有專門的講解。大的架構設計好了以後,這些重構細節點就成了東風之後的大火,對整個專案也是至關重要。31天重構這個系列和《**大全》、《重構:改善既有**的設計》比較起來最大的特點就是比較簡單、淺顯易懂。那麼我這些文章也都是學習sean chambers的31天重構的筆記整理,所以如果大家對這個筆記有任何異議也可以指出。

概念:本文中的」使用多型代替條件判斷」是指如果你需要檢查物件的型別或者根據型別執行一些操作時,一種很好的辦法就是將演算法封裝到類中,並利用多型性進行抽象呼叫。

正文:本文展示了物件導向程式設計的基礎之一「多型性」, 有時你需要檢查物件的型別或者根據型別執行一些操作時,一種很好的辦法就是將演算法封裝到類中,並利用多型性進行抽象呼叫。

如下**所示,orderprocessor 類的processorder方法根據customer 的型別分別執行一些操作,正如上面所講的那樣,我們最好將orderprocessor 類中這些演算法(資料或操作)封裝在特定的customer 子類中。

using system;

using system.collections.generic;

using system.linq;

using system.text;

using lostechies.daysofrefactoring.samplecode.breakmethod.after;

namespace lostechies.daysofrefactoring.samplecode.replacewithpolymorphism.before

public class

employee : customer

public class

nonemployee : customer

public class

orderprocessor

else if (customertype == typeof(nonemployee))

return ordertotal;}}

}

重構後的**如下,每個customer 子類都封裝自己的演算法,然後orderprocessor 類的processorder方法的邏輯也變得簡單並且清晰了。

using system;

using system.collections.generic;

using system.linq;

using system.text;

using lostechies.daysofrefactoring.samplecode.breakmethod.after;

namespace lostechies.daysofrefactoring.samplecode.replacewithpolymorphism.after

}public class

employee : customer}}

public class

nonemployee : customer}}

public class

orderprocessor

}}

總結:」使用多型代替條件判斷「這個重構在很多時候會出現設計模式中(常見的工廠家族、策略模式等都可以看到它的影子),因為運用它可以省去很多的條件判斷,同時也能簡化**、規範類和物件之間的職責。

小酌重構系列 14 使用多型代替條件判斷

有時候你可能會在條件判斷中,根據不同的物件型別 通常是基類的一系列子類,或介面的一系列實現 提供相應的邏輯和演算法。當出現大量型別檢查和判斷時,if else 或switch 語句的體積會比較臃腫,這無疑降低了 的可讀性。另外,if else 或switch 本身就是乙個 變化點 當需要擴充套件新的...

建議104 用多型代替條件語句

假設開發自動駕駛系統。在設計之初,自動駕駛系統擁有乙個駕駛系統命令的列舉型別 enum drivecommand start,stop 又假設有乙個駕駛的方法處理車輛接收到的指令。一開始我們這樣編碼 static void main string args drivecommand comand d...

6 使用條件判斷

使用條件判斷,可以讓 make 根據執行時的不同情況選擇不同的執行分支。條件表示式可以是比較變數的值,或是比較變數和常量的值。下面的例子,判斷 cc 變數是否 gcc 如果是的話,則使用 gnu函式編譯目標。libs for gcc lgnu normal libs foo objects ifeq...