合成複用原則(Composite Reuse Principle,CRP or CARP)

合成複用原則(Composite Reuse Principle,CRP)又叫組合/聚合複用原則(Composition/Aggregate Reuse Principle,CARP)。

定義

在軟件複用時,要儘量先使用組合或者聚合等關聯關係來實現,其次才考慮使用繼承關係來實現。

如果要使用繼承關係,則必須嚴格遵循里氏替換原則。合成複用原則同里氏替換原則相輔相成的,兩者都是開閉原則的具體實現規範。

繼承我們叫做白箱複用,相當於把所有的實現細節暴露給子類。

組合/聚合也稱之爲黑箱複用,對類以外的對象是無法獲取到實現細節的。

重要性

通常類的複用分爲繼承複用和合成複用兩種。

繼承複用雖然有簡單和易實現的優點,但它也存在以下缺點:

  1. 繼承複用破壞了類的封裝性。因爲繼承會將父類的實現細節暴露給子類,父類對子類是透明的,所以這種複用又稱爲“白箱”複用。
  2. 子類與父類的耦合度高。父類的實現的任何改變都會導致子類的實現發生變化,這不利於類的擴展與維護。
  3. 它限制了複用的靈活性。從父類繼承而來的實現是靜態的,在編譯時已經定義,所以在運行時不可能發生變化。

採用組合或聚合複用時,可以將已有對象納入新對象中,使之成爲新對象的一部分,新對象可以調用已有對象的功能,它有以下優點。

  1. 它維持了類的封裝性。因爲成分對象的內部細節是新對象看不見的,所以這種複用又稱爲“黑箱”複用。
  2. 新舊類之間的耦合度低。這種複用所需的依賴較少,新對象存取成分對象的唯一方法是通過成分對象的接口。
  3. 複用的靈活性高。這種複用可以在運行時動態進行,新對象可以動態地引用與成分對象類型相同的對象。

實現

合成複用原則是通過將已有的對象納入新對象中,作爲新對象的成員對象來實現的,新對象可以調用已有對象的功能,從而達到複用

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章