设计模式六大原则--合成/聚合复用原则

       背景

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

时间: 2024-08-01 22:09:55

设计模式六大原则--合成/聚合复用原则的相关文章

设计模式六大原则——合成/聚合复用原则(CARP)

   1.定义    简而言之,对于合成/聚合复用原则的定义就是:要尽量使用合成和聚合,尽量不要使用继承.           2.释义     为什么"要尽量使用合成和聚合,尽量不要使用继承"呢?      这是因为:      第一,继承复用破坏包装,它把父类的实现细节直接暴露给了子类,这违背了信息隐藏的原则:      第二:如果父类发生了改变,那么子类也要发生相应的改变,这就直接导致了类与类之间的高耦合,不利于类的扩展.复用.维护等,也带来了系统僵硬和脆弱的设计.而用合成和聚合

合成/聚合复用原则(CARP)

        组合/聚合复用原则(Composite/Aggregate Reuse Principle或CARP),就是在一个新的对象里面使用一些已有的对象,使之成为新对象的一部分,新对象通过向这些对象的委派达到复用已有功能的目的.这两种都是关联关系的一种,聚合表示整体与部分的关系,部分可以脱离整体作为独立个体存在:组合是一种更强的聚合,部分组成整体,但部分不可作为独立个体单独存在,部分的生命周期不能超过整体的生命周期.聚合好比电脑与鼠标,组合好比人与心脏.         组合/聚合与继承

java-简答的来说‘合成复用原则’是什么意思?

问题描述 简答的来说'合成复用原则'是什么意思? 7.合成复用原则(Composite Reuse Principle) 合成复用原则就是在一个新的对象里通过关联关系(组合关系.聚合关系)来使用一些已有的对象,使之成为新对象的一部分:新对象通过委派调用已有对象的方法达到复用功能的目的.简而言之,尽量使用 组合/聚合 的方式,而不是使用继承. 谁能举个栗子 解决方案 设计模式里面到处是这种例子,比如策略模式(Strategy),它在你的主类中聚合了一个策略类,而不同的策咯则是继承策略类.而不是把策

一句话评论设计模式六大原则

原文链接:http://www.cnblogs.com/lancidie/archive/2012/02/03/2337168.html        原则,故名思议则是本质的意思.所谓擒贼先擒王,研究设计模式自然要先了解设计原则,所有的模式都是在这些原则的基础之上发展起来的,有的是侧重一个,有的是多个都有所涉及.看完设计模式之后,我感觉到每个模式都有这些原则的影子,还渗透着面向对象的三大属性,也觉得这些原则也都有相通之处,,正是有了他们才使我们由代码工人转为艺术家.下面我来点评一下六大原则,望

[Head First设计模式]面向对象的3特征5原则

系列文章 [Head First设计模式]山西面馆中的设计模式--装饰者模式 [Head First设计模式]山西面馆中的设计模式--观察者模式 [Head First设计模式]山西面馆中的设计模式--建造者模式 [Head First设计模式]饺子馆(冬至)中的设计模式--工厂模式 [Head First设计模式]一个人的平安夜--单例模式 [Head First设计模式]抢票中的设计模式--代理模式 引言 今天突然跟朋友谈起设计原则,心里想想面向对象的设计原则与要素都有哪些?掰掰指头算算能说

设计模式六大原则 里氏替换原则

设计模式六大原则(2):里氏替换原则 是不是有不少人跟我刚看到这项原则的时候一样,对这个原则的名字充满疑惑其实原因就是这项原则最早是在1988年,由麻省理工学院的一位姓里的女士(Barbara Liskov)提出来的. 2002年,软件工程大师Robert C. Martin,出版了一本<Agile Software Development Principles Patterns and Practices>,在文中他把里氏代换原则最终简化为一句话: "Subtypes must b

设计模式六大原则 依赖倒置原则

设计模式六大原则(3): 依赖倒置原则 定义:高层模块不应该依赖低层模块,二者都应该依赖其抽象:抽象不应该依赖细节:细节应该依赖抽象. 所谓依赖倒置原则(Dependence Inversion Principle )就是要依赖于抽象,不要依赖于具体.简单的说就是对抽象进行编程,不要对实现进行编程,这样就降低了客户与实现模块间的耦合. 依赖倒置原则的核心思想是面向接口编程. 而面向过程的开发,上层调用下层,上层依赖于下层,当下层剧烈变化时,上层也要跟着变化,这就会导致模块的复用性降低而且大大提高

java设计模式六大原则之场景应用分析

看了一篇文章,感觉收获蛮大,不过还有一些不懂,收藏慢慢研究. 面对项目中如此众多的设计模式,我们有时候无法下手.在强大的设计框架也终脱离不了23种设计模式,6大原则.我们只要把内功修炼好,掌握其精髓也离我们不远了...     目录: 设计模式六大原则(1):单一职责原则 设计模式六大原则(2):里氏替换原则 设计模式六大原则(3):依赖倒置原则 设计模式六大原则(4):接口隔离原则 设计模式六大原则(5):迪米特法则 设计模式六大原则(6):开闭原则 设计模式六大原则(1):单一职责原则 设计

设计模式六大原则 单一职责原则

设计模式六大原则(1):单一职责原则 定义:不要存在多于一个导致类变更的原因.通俗的说,即一个类只负责一项职责,一个人只负责做一件事. ( 一个类,只有一个引起它变化的原因.应该只有一个职责.每一个职责都是变化的一个轴线,如果一个类有一个以上的职责,这些职责就耦合在了一起.这会导致脆弱的设计.当一个职责发生变化时,可能会影响其它的职责.另外,多个职责耦合在一起,会影响复用性.例如:要实现逻辑和界面的分离 ) 问题由来:类T负责两个不同的职责:职责P1,职责P2.当由于职责P1需求发生改变而需要修