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

2022-05-10 14:01:41 字數 1553 閱讀 9480

合成復用原則(composite/aggregate reuse principle,carp)是指盡量使用物件組合(has-a)/聚合(contanis-a),而不是繼承關係達到軟體復用的目的。可以使系統更加靈活,降低類與類之間的耦合度,乙個類的變化對其他類造成的影響相對較少。繼承我們叫做白箱復用,相當於把所有的實現細節暴露給子類。組合/聚合也稱之為黑箱復用,對類以外的物件是無法獲取到實現細節的。要根據具體的業務場景來做**設計,其實也都需要遵循oop模型。以資料庫操作為例,先來建立dbconnection類:

1

package

com.lch.test.carp;23

public

class

dbconnection

7 }

建立productdao類: 

1

package

com.lch.test.carp;23

public

class

productdao 89

public

void

addproduct()

13 }

這就是一種非常典型的合成復用原則應用場景。但是,目前的設計來說,dbconnection還不是一種抽象,不便於系統擴充套件。目前的系統支援mysql資料庫連線,假設業務發生變化,資料庫操作層要支援oracle資料庫。當然,我們可以在dbconnection中增加對oracle資料庫支援的方法。但是違背了開閉原則。其實,我們可以不必修改dao的**,將dbconnection修改為abstract,來看**:

1

package

com.lch.test.carp;23

public

abstract

class

dbconnection

然後,將mysql的邏輯抽離:

1

package

com.lch.test.carp;23

public

class

mysqlconnection extendsdbconnection

9 }

再建立oracle支援的邏輯:

1

package

com.lch.test.carp;23

public

classoracleconnection extendsdbconnection

9 }

具體使用哪個資料庫來進行連線,交給應用層去選擇,進行測試:

1

package

com.lch.test.carp;23

public

class

compositereusetest

9 }

最終uml類圖如下:

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

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

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

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

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

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