簡而言之,對於合成/聚合復用原則的定義就是:要盡量使用合成和聚合,盡量不要使用繼承。
為什麼「要盡量使用合成和聚合。盡量不要使用繼承」呢?
這是由於:
第一,繼承復用破壞包裝,它把父類的實現細節直接暴露給了子類,這違背了資訊隱藏的原則;
第二:假設父類發生了改變。那麼子類也要發生對應的改變。這就直接導致了類與類之間的高耦合,不利於類的擴充套件、復用、維護等,也帶來了系統僵硬和脆弱的設計。
而用合成和聚合的時候新物件和已有物件的互動往往是通過介面或者抽象類進行的,就能夠非常好的避免上面的不足。並且這也能夠讓每個新的類專注於實現自己的任務,符合單一職責原則。
兩種推斷方法:
「is-a」代表乙個類是另外乙個類的一種。能夠使用繼承關係,例如以下圖
而「has-a」代表乙個類是另外乙個類的乙個角色,而不是另外乙個類的特殊種類。
例如以下圖
黎克特制代換原則是繼承復用的基礎。
詳細介紹:設計模式六大原則——黎克特制代換原則
設計模式六大原則
0.05 設計模式 設計模式 規範 筆記 大話設計模式 物件導向的關鍵在於封裝,封裝好了才能很好的復用,達到單一職責和開放擴充套件 封閉更改的效果。1 單一職責原則 就乙個類而言,應該僅有乙個引起它變化的原因.增加功能不應該修改已有的 避免修改出錯及重複測試.如果你能夠想到多於乙個的動機去改變乙個類...
設計模式六大原則
0.05 設計模式 設計模式 規範 筆記 大話設計模式 物件導向的關鍵在於封裝,封裝好了才能很好的復用,達到單一職責和開放擴充套件 封閉更改的效果。1 單一職責原則 就乙個類而言,應該僅有乙個引起它變化的原因.增加功能不應該修改已有的 避免修改出錯及重複測試.如果你能夠想到多於乙個的動機去改變乙個類...
設計模式六大原則
參考文章 單一職責原則 single responsibility principle,srp 乙個類只負責乙個功能領域中的相應職責,或者可以定義為 就乙個類而言,應該只有乙個引起它變化的原因。開閉原則 open closed principle,ocp 乙個軟體實體應當對擴充套件開放,對修改關閉。...