為什麼多用組合少用繼承?繼承最大的問題就在於:容易繼承層次過深、繼承關係過於複雜影響到**的可讀性和可維護性。
為什麼繼承容易過深過複雜?繼承是實現多型的手段,當態太多時,就容易導致過於複雜和過深。
我們以穿戴衣物為例,如圖:
從對人體保護部位的不同可以分為:
從品牌不同可分為:
為了圖更簡單,我略掉了襪子、帽子、手套。
從季節不同可分為:
從材質不同分為:
到目前為此你可能覺得都簡單,現在如果通過繼承要把這些不同都表現在衣物上會變成什麼?會是乙個多層的多叉樹,想想都覺得很亂是不是?
如果通過繼承把這些不同維度特性表現在衣物上,則必然導致繼承類過多,擴充套件性差,維護困難,這種現象可稱為繼承**。
如果換成組合會怎麼樣呢?以品牌為例,我們來看怎麼表現在衣物上,其他如季節、材質跟品牌一樣。
通過組合方式很簡單的就把乙個多層多叉樹,變成了只有二層繼承的結構。
多用組合少用繼承思想在設計模式中有很多的運用。我自己在學習設計模式的過程,就對橋接模式有很多的疑惑,直到理解了多用組合少用繼承設計思想,才直正理解橋接模式。
軟體設計原則 多用組合少用繼承
黑盒實現重用的兩個途徑 白盒和黑盒重用。白盒基於類的繼承,但要承受繼承的缺點。黑盒基於物件組合。public class registereduser user 派生類繼承了父類的上下文,獲得父物件狀態的某種可見性。隨著不同版本派生類的出現,並不能保證父類和派生類真的可以交替使用。保證父類及其派生類...
程式設計 多用組合少用繼承原則
一 方法服用的兩種最常用的技術就是類繼承和物件組合。1.繼承復用 子類中可以將父類的方法當作自己的方法使用 非private修飾的 優點 可以通過重寫父類方法,來修改或擴充套件父類方法 缺點 繼承來的方法在編譯期就已經確定,無法在執行期間改變從父類繼承來的方法的行為 子類和父類是強耦合關係,也就是說...
為什麼多用組合,少用繼承?
繼承和組合都是實現類重用的手段,何時用繼承何時用組合?繼承表示 is a 的關係,繼承是對已有的類做一番改造,以此獲得乙個特殊的版本。即將乙個較為抽象的類改造成能適用於某些特定需求的類。組合表示 has a 的關係,如果兩個類之間有明顯的整體 部分的關係,適合用組合,比如people和arm類。將a...