背景
对于很多人来说自己的第一步手机或者曾经用过的手机里一定有诺基亚的身影。记得当年的诺基亚的手机即时使用的系统是相同的也可能不能使用相同的软件,还得看具体的机型。现在想着就麻烦,哪里有电脑上的软件和安卓智能手机上的软件使用起来方便。如果你看了之前的博客,你肯定会知道,今天我们要了解的是合成/聚合复用模式(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)来使用,必须仔细地对接口进行定义。