組合/聚合復用原則 【5,Composition/Aggregation Reuse Principle(CARP)
就是說要盡量的使用合成和聚合,而不是繼承關系達到復用的目的。
該原則就是在一個新的對象里面使用一些已有的對象,使之成為新對象的一部分:新的對象通過向這些對象的委派達到復用已有功能的目的。
?
?其實這里最終要的地方就是區分“has-a”和“is-a”的區別。相對于合成和聚合,
繼承的缺點在于:父類的方法全部暴露給子類。父類如果發生變化,子類也得發生變化。聚合的復用的時候就對另外的類依賴的比較的少。。
? ☆ 合成/聚合復用
① 優點:
? 新對象存取成分對象的唯一方法是通過成分對象的接口;
? 這種復用是黑箱復用,因為成分對象的內部細節是新對象所看不見的;
? 這種復用支持包裝;
? 這種復用所需的依賴較少;
? 每一個新的類可以將焦點集中在一個任務上;
? 這種復用可以在運行時動態進行,新對象可以使用合成/聚合關系將新的責任委派到合適的對象。
② 缺點:
? 通過這種方式復用建造的系統會有較多的對象需要管理。
☆ 繼承復用
① 優點:
? 新的實現較為容易,因為基類的大部分功能可以通過繼承關系自動進入派生類;
? 修改或擴展繼承而來的實現較為容易。
② 缺點:
? 繼承復用破壞包裝,因為繼承將基類的實現細節暴露給派生類,這種復用也稱為白箱復用;
? 如果基類的實現發生改變,那么派生類的實現也不得不發生改變;
? 從基類繼承而來的實現是靜態的,不可能在運行時發生改變,不夠靈活。
參考:http://blog.csdn.net/plusir/archive/2006/08/20/1099824.aspx