日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

软件设计原则(七)合成/聚合复用原则(Composite/Aggregate Reuse Principle,CARP)

發布時間:2024/1/23 编程问答 54 豆豆
生活随笔 收集整理的這篇文章主要介紹了 软件设计原则(七)合成/聚合复用原则(Composite/Aggregate Reuse Principle,CARP) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

定義:在一個新的對象里面使用一些已有的對象,使之成為新對象的一部分;新的對象通過向這些對象的委派達到復用這些對象的目的。應首先使用合成/聚合,合成/聚合則使系統靈活,其次才考慮繼承,達到復用的目的。而使用繼承時,要嚴格遵循里氏代換原則。有效地使用繼承會有助于對問題的理解,降低復雜度,而濫用繼承會增加系統構建、維護時的難度及系統的復雜度。
如果兩個類是“Has-a”關系應使用合成、聚合,如果是“Is-a”關系可使用繼承。"Is-A"是嚴格的分類學意義上定義,意思是一個類是另一個類的"一種"。而"Has-A"則不同,它表示某一個角色具有某一項責任。

?什么是合成?什么是聚合?

合成(Composition)和聚合(Aggregation)都是關聯(Association)的特殊種類。
聚合表示整體和部分的關系,表示“擁有”。如奔馳S360汽車,對奔馳S360引擎、奔馳S360輪胎的關系是聚合關系,離開了奔馳S360汽車,引擎、輪胎就失去了存在的意義。在設計中, 聚合不應該頻繁出現,這樣會增大設計的耦合度。
合成則是一種更強的“擁有”,部分和整體的生命周期一樣。合成的新的對象完全支配其組成部分,包括它們的創建和湮滅等。一個合成關系的成分對象是不能與另一個合成關系共享的。
換句話說,合成是值的聚合(Aggregation by Value),而一般說的聚合是引用的聚合(Aggregation by Reference)。
明白了合成和聚合關系,再來理解合成/聚合原則應該就清楚了,要避免在系統設計中出現,一個類的繼承層次超過3層,則需考慮重構代碼,或者重新設計結構。當然最好的辦法就是考慮使用合成/聚合原則。

?通過合成/聚合來進行復用的優缺點

優點:

1) 新對象存取成分對象的唯一方法是通過成分對象的接口。
2) 這種復用是黑箱復用,因為成分對象的內部細節是新對象所看不見的。
3) 這種復用支持包裝。
4) 這種復用所需的依賴較少。
5) 每一個新的類可以將焦點集中在一個任務上。
6) 這種復用可以在運行時間內動態進行,新對象可以動態的引用與成分對象類型相同的對象。
7) 作為復用手段可以應用到幾乎任何環境中去。
缺點:就是系統中會有較多的對象需要管理。

?通過繼承來進行復用的優缺點

優點:
1)新的實現較為容易,因為超類的大部分功能可以通過繼承的關系自動進入子類。

2)修改和擴展繼承而來的實現較為容易。

缺點:
1) 繼承復用破壞包裝,因為繼承將超類的實現細節暴露給子類。由于超類的內部細節常常是對于子類透明的,所以這種復用是透明的復用,又稱“白箱”復用。

2) 如果超類發生改變,那么子類的實現也不得不發生改變。

3)從超類繼承而來的實現是靜態的,不可能在運行時間內發生改變,沒有足夠的靈活性。

4)繼承只能在有限的環境中使用。

此部分引用自:http://www.cnblogs.com/temptation/archive/2008/03/10/1098351.html

總結

以上是生活随笔為你收集整理的软件设计原则(七)合成/聚合复用原则(Composite/Aggregate Reuse Principle,CARP)的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。