設計模式之美筆記 組合 與 繼承 差異

2021-10-23 22:45:18 字數 538 閱讀 7054

設計模式之美 - 10

物件導向程式設計中,經典的設計原則 —— 組合優於繼承,多用組合少用繼承。

問題:

繼承:可以解決**復用問題。偏重於從屬關係。

繼承存在的問題:所有的鳥都繼承鳥類的父類,父類中有乙個fly的方法,但是對於鴕鳥,企鵝這類鳥類,就不應該存在fly這個方法。因為對於不會飛的鳥類,繼承鳥類的父類,一方面會增加編碼的工作量;另一方面,違背了 最少知道的設計原則。暴露不該暴露的介面給外部,增加了類使用過程中被誤用的概率。

繼承最大的問題就在於:繼承層次過深、繼承關係過於複雜會影響到**的可讀性和可維護性。

實際上,我們可以利用組合(composition)、介面、委託(delegation)三個技術手段,一塊兒來解決剛剛繼承存在的問題。

如果類之間的繼承結構穩定(不會輕易改變),繼承層次比較淺(比如,最多有兩層繼承關係),繼承關係不複雜,我們就可以大膽地使用繼承。反之,系統越不穩定,繼承層次很深,繼承關係複雜,我們就盡量使用組合來替代繼承。

組合與繼承差異

組合 has a 關係可以顯式地獲得被包含類 繼承中稱為父類 的物件,而繼承 is a 則是隱式地獲得父類的物件,被包含類和父類對應,而組合外部類和子類對應。2 組合關係在執行期決定,而繼承關係在編譯期就已經決定了。3 組合是在組合類和被包含類之間的一種松耦合關係,而繼承則是父類和子類之間的一種緊耦...

設計模式之美20 組合模式

組合模式用的很少 組合模式跟我們之前講的物件導向設計中的 組合關係 通過組合來組裝兩個類 完全是兩碼事。這裡講的 組合模式 主要是用來處理樹形結構資料。這裡的 資料 將一組物件組織 compose 成樹形結構,以表示一種 部分 整體 的層次結構。組合讓客戶端 在很多設計模式書籍 中,客戶端 代指 的...

設計模式學習筆記之組合模式

組合模式 允許你將物件組合成樹形結構來表現 整體 部分 層次結構。組合能讓客戶以一致的方式處理個別物件以及物件組合。使用組合結構,我們能把相同的操作應用在組合和個別物件上。換句話說,在大多數情況下,我們可以忽略物件組合和個別物件之間的差別。說明 1 組合模式使新增或者刪除子節點變得容易 場景 1 想...