168
技術社區[雲棲]
設計模式六大原則--合成/聚合複用原則
背景
對於很多人來說自己的第一步手機或者曾經用過的手機裏一定有諾基亞的身影。記得當年的諾基亞的手機即時使用的係統是相同的也可能不能使用相同的軟件,還得看具體的機型。現在想著就麻煩,哪裏有電腦上的軟件和安卓智能手機上的軟件使用起來方便。如果你看了之前的博客,你肯定會知道,今天我們要了解的是合成/聚合複用模式(Composite/Aggregate Reuse Principle,縮寫CARP)。
定義
盡量使用合成/聚合,盡量不要使用類繼承。(Design to interfaces;Favor composition over inheritance;Find what varies andencapsulate it)
詳細說明
合成(Composition)和聚合(Aggregaion)都是兩種特殊種類。合成和聚合都表示一種整體和部分的關係。不同點在於聚合體現的是A對象包含B對象,但是B不是A對象的一部分;而合成體現的是嚴格的整體與部分的關係,部分和整體的生命周期一樣。
示例
合成/聚合複用原則在設計模式中最好的體現就是橋接(Bridge)模式,下麵是橋接模式的結構圖。
優劣
優點
新對象存取成分對象的唯一方法是通過成分對象的接口;這種複用是黑箱複用,因為成分對象的內部細節是新對象所看不見的;這種複用支持包裝;這種複用所需的依賴較少;每一個新的類可以將焦點集中在一個任務上;這種複用可以在運行時動態進行,新對象可以使用合成/聚合關係將新的責任委派到合適的對象。
總體上來說合成/聚合複用的好處是,優先使用對象的合成/聚合將有助於你保持每個類被封裝,並被集中在單個任務上。這樣類和集成層次會保持較小規模,並且不太可能增長為不可控製的龐然大物。
缺點
通過這種方式複用建造的係統會有較多的對象需要管理;為了能將多個不同的對象作為組合塊(composition block)來使用,必須仔細地對接口進行定義。
最後更新:2017-04-03 12:55:07
上一篇:
openstack 命令行管理五 - 磁盤配額管理(備忘)
下一篇:
.NET幾個重要概念
StreamingPro添加Scala script 模塊支持
永久免費OA辦公係統的功能模塊介紹(一)
三次渡劫,如何成就兩年150萬粉絲的皇冠店?
nginx: [warn] conflicting server name "www.dedecms8.com" on 0.0.0.0:80, ignored
玩過這些經典單機遊戲,就說明你已經老了
Kubernetes核心原理(二)之Controller Manager
《配置管理最佳實踐》——1.3 源代碼管理核心概念
典型的 C++ 程序員成長經曆
當InternalsVisibleToAttribute特性遭遇"強簽名"
聯通電信校園促銷加碼 策略更隱蔽