設計模式之合成 聚合利用原則(CARP)

2022-01-16 08:09:48 字數 1046 閱讀 2958

一、概念

carp:compositionaggregation principle

合成聚合復用原則,盡量使用合成/聚合,盡量不使用類繼承。合成聚合是「has  a」的關係,而繼承是「is  a」的關係。由於繼承是一中強耦合的結構,父類變,子類必變。所以不是「is  a」關係,我們一般不要用繼承。優先使用合成聚合復用原則,有助於保持每個類的封裝,降低繼承的層次。合成/聚合復用原則就是在乙個新的物件裡面使用一些已有的物件,使之成為新物件的一部分;新的物件通過向這些物件的委派達到復用已有功能的目的。它的設計原則是;要盡量使用合成/聚合,盡量不要使用繼承。

就是說要少用繼承,多用合成關係來實現。我曾經這樣寫過程式:有幾個類要與資料庫打交道,就寫了乙個資料庫操作的類,然後別的跟資料庫打交道的類都繼承這個。結果後來,我修改了資料庫操作類的乙個方法,各個類都需要改動。"牽一髮而動全身"!物件導向是要把波動限制在盡量小的範圍。

一句話點評:優生優育,不要盲目繁衍。

二、聚合與合成的優缺點:

優點:1、新物件訪問成分物件的唯一方法是通過成分物件的介面。

2、此原則是黑箱復用,因為成分物件的內部細節對新物件而言是看不到的。

3、此原則復用支援包裝。

4、此原則復用所需的依賴較少。

5、每乙個新的類可以將焦點集中在乙個任務上。

6、此原則復用可以在執行時間內動態進行,新物件可以分理處態的引用與成分物件型別相同的物件。

缺點:1、系統中會有比較多的物件需要管理

三、繼承的優缺點:

優點:1、新的實現較為容易,因為超類的大部分功能可以通過繼承的關係自動進入子類。

2、修改和擴充套件繼承而來的實現較為容易。

缺點:1、繼承復用破壞包裝,因為繼承將超類的實現細節暴露給子類。由於超類的內部細節常常是對於子類透明的,所以這種復用是透明的復用,又稱「白箱」復用。

2、如果超類發生改變,那麼子類的實現也不得不發生改變。

3、從超類繼承而來的實現是靜態的,不可能在執行時間內發生改變,沒有足夠的靈活性。

設計模式原則 合成 聚合復用原則(四)

閱讀目錄 一 合成 聚合復用原則 二 什麼是合成?三 什麼是聚合?四 為什麼盡量不要使用類繼承而使用合成 聚合?五 合成 聚合復用原則結構圖 一 合成 聚合復用原則 盡量使用合成 聚合,盡量不要使用類繼承 二 什麼是合成?合成表示一種強的擁有關係,體現了嚴格的部分和整體的關係,部分和整體的生命週期一...

大話設計模式筆記 合成 聚合復用原則

合成 聚合復用原則,盡量使用合成 聚合,盡量不要使用類繼承。聚合 aggregation 表示一種弱的 擁有 關係,體現的是a物件可以包含b物件但b物件不是a物件的一部分。合成 composition 則是一種強的 擁有 關係,體現了嚴格的部分和整體關係,部分和整體的生命週期一樣。優先使用物件的合成...

設計模式之合成復用原則

1.合成 聚合復用原則 盡量優先使用合成 聚合,盡量不要使用類繼承。盲目使用繼承會造成麻煩。所以在使用繼承時,一定要在是 is a 的關係時,再考慮使用。手機軟體顯然不是乙個,即不是 a,所以不能從手機品牌向下繼承。如下圖是不對的。聚合 表示一種弱的 擁有 關係,體現的是 a物件可以包含 b物件,但...