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

        组合/聚合复用原则(Composite/Aggregate Reuse Principle或CARP),就是在一个新的对象里面使用一些已有的对象,使之成为新对象的一部分,新对象通过向这些对象的委派达到复用已有功能的目的。这两种都是关联关系的一种,聚合表示整体与部分的关系,部分可以脱离整体作为独立个体存在;组合是一种更强的聚合,部分组成整体,但部分不可作为独立个体单独存在,部分的生命周期不能超过整体的生命周期。聚合好比电脑与鼠标,组合好比人与心脏。
        组合/聚合与继承是实现复用的两个基本途径,继承复用通过扩展一个已有对象的实现来获取新功能,基类负责共同的属性和方法,子类通过新增新的属性和方法对基类进行扩展实现;组合/聚合复用则将已有对象纳入新对象中,使之成为新对象的一部分,新的对象可以调用已有对象的功能。
        两种方式各有优缺点:
        继承复用,优点是新的实现或修改较为容易,超类功能继承到子类。但继承复用破坏封装,超类的改变带动子类改变,超类继承的实现是静态,不可再运行时发生改变,灵活性不足。
        组合/聚合复用,缺点是有较多对象需要管理,而且对接口的定义要求较严格,是为了实现不同的对象作为组合块;优点是支持封装,依赖较少,新加类可将焦点集中一个任务上,内部细节对新对象不可见,新对象只可通过接口对成分对象的读取,新对象可动态在成分对象中使用。
        经验告诉我们应该“尽量使用组合/聚合,尽量不使用继承”。即优先使用对象组合/聚合,而非继承。
        使用继承关系有如下规则:
        ①子类是超类的一个特殊种类,而不是超类的一个角色。
        ②永远不会出现需要将子类换成另外一个类的子类的情况。如果不能肯定将来是否会变成另外一个子类的话,就不要使用继承。
        ③子类具有扩展超类的责任,而不是具有置换掉或注销掉超类的责任。如果一个子类需要大量的置换掉超类的行为,那么这个类就不应该是这个超类的子类。

    

喜欢研究java的同学可以交个朋友,下面是本人的微信号:

时间: 2025-01-09 13:13:21

合成/聚合复用原则(CARP)的相关文章

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

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

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

       背景        对于很多人来说自己的第一步手机或者曾经用过的手机里一定有诺基亚的身影.记得当年的诺基亚的手机即时使用的系统是相同的也可能不能使用相同的软件,还得看具体的机型.现在想着就麻烦,哪里有电脑上的软件和安卓智能手机上的软件使用起来方便.如果你看了之前的博客,你肯定会知道,今天我们要了解的是合成/聚合复用模式(Composite/Aggregate Reuse Principle,缩写CARP).        定义        尽量使用合成/聚合,尽量不要使用类继承.

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

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

设计模式学习:组合复用原则

组合复用原则定义: 在一个新的对象里面使用一些已有的对象,使之成为新对象的一部分,新的对象通过向这些对象的委派达到复用已有功能的目的 另外一种说法是:尽量使用(对象)组合,而非继承 那么组合和继承各自有什么特点,优缺点,为什么要有这样的优先呢!先来比较一下组合和继承. 组合 VS. 继承 组合复用的优点和缺点 组合 优点: 1容器类仅能通过被包含对象的接口来对其进行访问. 2"黑盒"复用,因为被包含对象的内部细节对外是不可见. 3  封装性好. 4  通过获取指向其它的具有相同类型的对

《java与模式》读书笔记 ----模式设计的原则

笔记|设计 里氏代换原则----LSP 概念:一个软件实体如果使用一个父类的话,那么一定适用于其之类,而且不能觉察出父类和子类的区别. 里氏代换原则是继承复用的基石.只有当衍生类可以替换掉基类,软件单位不会受到影响时,基础类才真正被复用,而衍生类才能在基础类上增加新的行为. JAVA中的上塑造型既是里氏代换原则的体现. 依赖倒转原则-----DIP   狭义依赖关系. 依赖关系(Dependency)类与类之间的一种连接,依赖总是单向的.一各类依赖于另一各类的定义.一个人(Person)可以买车

Design Pattern - 7原则

很多程序员用面向对象语言写了多年的代码, 仍然不知道设计模式为何物, 这不奇怪, 设计模式并不是非有不可,可是它能让代码变的更美好.  程序员大可闷头堆代码, 复制粘贴, 然后不断的感慨代码难以维护, 难以复用, 难以扩展, 而继续不思进取.  当然也可以选折不断去追求更美好, 更合理的代码, 把自己从bug调试, 需求变动等噩梦中拯救出来, 进而真正体会到编码的乐趣.  你如果选折后者那么设计模式对于你而言, 是真正必不可少的, 只有当你真正认真考虑过代码的复用性,扩展性,和合理性时, 你才能

设计原则

一.针对接口编程,而不是针对实现编程 – 客户无需知道所使用对象的特定类型,只需要知道对象拥有客户所期望的接口. 小注:         接口是定义行为,只是定义我们要做什么事情,至于如何做这些事情是由接口的实现来做的,当我们定义接口的时候无需关心这个行为如何实现,只要知道有这个接口就可以.        别人在调用你的代码的时候,都是调用你的接口对象,至于如何实现,对别人是透明的. 二.优先使用对象组合,而不是类继承 – 类继承通常为"白箱复用",对象组合通常为"黑箱复用&

设计模式之设计原则

之前在做 .Net的时候就买了<Head First 设计模式>,也看了一下,由于看的也不深入,理解上不是太深,特别是没有动手敲一下,最近闲的蛋蛋疼,也想着跳槽,但觉得要沉住气,耐得住寂寞,不能跳槽太频繁,这样对职业生涯不好,所以趁着没事做,就试着把它再看一遍,书读百遍,其意自现嘛.当时在学校学软件工程课程时也讲过设计的基本原则,不过当时主要是理论也没实践过,回过头再温习一下,理解的可能会更深,温故知新嘛. 首先是软件设计的基本原则,这也是设计模式的目标: 单一职责原则(SRP),就一个类而言

大话设计模式:(六大原则)

设计模式六大原则分别是单一职责原则(SPR).开放-封闭原则.里氏代换原则(LSP).依赖倒转原则.迪米特原则(LoD)和合成/聚合复用原则(CARP).   1.单一职责原则,就一个类而言,应该仅有一个引起它变化的原因. 如果一个类承担的职责过多,就等于把这些职责耦合在一起,一个职责的变化可能会削弱或者抑制这个类完成其他职责的能力.这种耦合导致的设计,当变化发生时,设计会遭受到意想不到的破坏. 软件设计真正要做的许多内容,就是如果发现职责并把那些职责相互分离.其实这个要去判断是否应该分离出类来