合成復用原則(composite/aggregate reuse principle,carp)是指盡量使用物件組合(has-a)/聚合(contanis-a),而不是繼承關係達到軟體復用的目的。可以使系統更加靈活,降低類與類之間的耦合度,乙個類的變化對其他類造成的影響相對較少。繼承我們叫做白箱復用,相當於把所有的實現細節暴露給子類。組合/聚合也稱之為黑箱復用,對類以外的物件是無法獲取到實現細節的。要根據具體的業務場景來做**設計,其實也都需要遵循oop模型。以資料庫操作為例,先來建立dbconnection類:
1建立productdao類:package
com.lch.test.carp;23
public
class
dbconnection
7 }
1這就是一種非常典型的合成復用原則應用場景。但是,目前的設計來說,dbconnection還不是一種抽象,不便於系統擴充套件。目前的系統支援mysql資料庫連線,假設業務發生變化,資料庫操作層要支援oracle資料庫。當然,我們可以在dbconnection中增加對oracle資料庫支援的方法。但是違背了開閉原則。其實,我們可以不必修改dao的**,將dbconnection修改為abstract,來看**:package
com.lch.test.carp;23
public
class
productdao 89
public
void
addproduct()
13 }
1然後,將mysql的邏輯抽離:package
com.lch.test.carp;23
public
abstract
class
dbconnection
1再建立oracle支援的邏輯:package
com.lch.test.carp;23
public
class
mysqlconnection extendsdbconnection
9 }
1具體使用哪個資料庫來進行連線,交給應用層去選擇,進行測試:package
com.lch.test.carp;23
public
classoracleconnection extendsdbconnection
9 }
1最終uml類圖如下:package
com.lch.test.carp;23
public
class
compositereusetest
9 }
軟體設計原則 合成復用原則
合成復用原則是指 盡量先使用組合或者聚合等關聯關係來實現,其次才考慮使用繼承關係來實現。通常類的復用分為繼承復用和合成復用兩種。繼承復用雖然有簡單和易實現的優點,但它也存在以下缺點 繼承復用破壞了類的封裝性。因為繼承會將父類的實現細節暴露給子類,父類對子類是透明的,所以這種復用又稱為 白箱 復用。子...
軟體設計原則 合成復用原則
合成復用原則 composite aggregate reuse principle,carp 盡量使用物件組合 聚合,而不是繼承關係 很典型合成復用 建立乙個資料庫連線類 public class dbconnection 連線的資料庫的demo public class demodao publ...
軟體設計原則 合成復用原則
合成復用原則是指 盡量先使用組合或者聚合等關聯關係來實現,其次才考慮使用繼承關係來實現。通常類的復用分為繼承復用和合成復用兩種。繼承復用雖然有簡單和易實現的優點,但它也存在以下缺點 繼承復用破壞了類的封裝性。因為繼承會將父類的實現細節暴露給子類,父類對子類是透明的,所以這種復用又稱為 白箱 復用。子...