軟體設計原則 合成復用原則

2022-10-08 18:18:17 字數 849 閱讀 1479

合成復用原則是指:盡量先使用組合或者聚合等關聯關係來實現,其次才考慮使用繼承關係來實現。

通常類的復用分為繼承復用和合成復用兩種。

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

繼承復用破壞了類的封裝性。因為繼承會將父類的實現細節暴露給子類,父類對子類是透明的,所以這種復用又稱為「白箱」復用。

子類與父類的耦合度高。父類的實現的任何改變都會導致子類的實現發生變化,這不利於類的擴充套件與維護。

它限制了復用的靈活性。從父類繼承而來的實現是靜態的,在編譯時已經定義,所以在執行時不可能發生變化。

採用組合或聚合復用時,可以將已有物件納入新物件中,使之成為新物件的一部分,新物件可以呼叫已有物件的功能,它有以下優點:

它維持了類的封裝性。因為成分物件的內部細節是新物件看不見的,所以這種復用又稱為「黑箱」復用。

物件間的耦合度低。可以在類的成員位置宣告抽象。

復用的靈活性高。這種復用可以在執行時動態進行,新物件可以動態地引用與成分物件型別相同的物件。

下面看乙個例子來理解合成復用原則

【例】汽車分類管理程式

汽車按「動力源」劃分可分為汽油汽車、電動汽車等;按「顏色」劃分可分為白色汽車、黑色汽車和紅色汽車等。如果同時考慮這兩種分類,其組合就很多。類圖如下:

從上面類圖我們可以看到使用繼承復用產生了很多子類,如果現在又有新的動力源或者新的顏色的話,就需要再定義新的類。我們試著將繼承復用改為聚合復用看一下。

軟體設計原則 合成復用原則

合成復用原則是指 盡量先使用組合或者聚合等關聯關係來實現,其次才考慮使用繼承關係來實現。通常類的復用分為繼承復用和合成復用兩種。繼承復用雖然有簡單和易實現的優點,但它也存在以下缺點 繼承復用破壞了類的封裝性。因為繼承會將父類的實現細節暴露給子類,父類對子類是透明的,所以這種復用又稱為 白箱 復用。子...

軟體設計原則 合成復用原則

合成復用原則 composite aggregate reuse principle,carp 盡量使用物件組合 聚合,而不是繼承關係 很典型合成復用 建立乙個資料庫連線類 public class dbconnection 連線的資料庫的demo public class demodao publ...

設計模式 軟體設計原則7 合成復用原則

合成復用原則 composite aggregate reuse principle,carp 是指盡量使用物件組合 has a 聚合 contanis a 而不是繼承關係達到軟體復用的目的。可以使系統更加靈活,降低類與類之間的耦合度,乙個類的變化對其他類造成的影響相對較少。繼承我們叫做白箱復用,相...