定義:指盡量使用物件組合或物件聚合的方式實現**復用,而不是用繼承關係達到復用**的目的。合成復用原則可以使系統更加靈活,降低類與類之間的耦合度,乙個類的變化對其他類造成的影響相對較小。
繼承,又被稱為白箱復用,相當於把所有實現細節暴露給子類。組合/聚合又被稱為黑箱復用。對類以外的物件是無法獲取到實現細節的。我們要根據具體的業務場景來做**設計。
來我們看乙個案例,還是以資料庫操作為例,首先建立dbconnection類:
packageorg.test.design.principle.carp;
public
class
dbconnection
}
建立productdao類:
packageorg.test.design.principle.carp;
public
class
productdao
public
void
addproduct()
}
這是一種非常典型的合成復用原則應用場景。但是,對於目前的設計來說,dbconnection還不是一種抽象,不便於系統擴充套件。目前的系統支援mysql資料庫連線,假設業務發生變化,資料庫操作層要支援oracle資料庫。當然,我們可以在dbconnection中增加對oracle資料庫支援的方法,但是這違背了開閉原則。其實,可以不必須修改dao的**,將dbconnection修改為abstract,**如下:
packageorg.test.design.principle.carp;
public
abstract
class
dbconnectionv2
然後將mysql的邏輯抽離
packageorg.test.design.principle.carp;
public
class mysqlconnection extends
dbconnectionv2
}
再建立oracle支援的邏輯
packageorg.test.design.principle.carp;
public
class oracleconnection extends
dbconnectionv2
}
此篇完。
物件導向設計原則 合成復用原則
合成復用原則又稱為組合 聚合復用原則 composition aggregate reuse principle,carp 其定義如下 合成復用原則 composite reuse principle,crp 盡量使用物件組合,而不是繼承來達到復用的目的。合成復用原則就是在乙個新的物件裡通過關聯關係...
物件導向設計原則之合成復用原則
合成復用原則又稱為組合 聚合復用原則 composition aggregate reuse principle,carp 其定義如下 合成復用原則 composite reuse principle,crp 盡量使用物件組合,而不是繼承來達到復用的目的。合成復用原則就是在乙個新的物件裡通過關聯關係...
物件導向設計原則之合成復用原則
合成復用原則又稱為組合 聚合復用原則 composition aggregate reuse principle,carp 其定義如下 合成復用原則 composite reuse principle,crp 盡量使用物件組合,而不是繼承來達到復用的目的。合成復用原則就是在乙個新的物件裡通過關聯關係...