`
student_lp
  • 浏览: 437143 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论
阅读更多

     合成/聚合复用原则经常又叫做合成复用原则。合成/聚合复用原则就是在一个新的对象里面使用一些已有的对象,使之成为新对象的一部分:新的对象通过向这些对象的委派达到复用已有功能的目的。简短的表述是:要尽量使用合成/聚合,尽量不适用集成

一、合成和聚合的区别

     合成和聚合均是关联关系的特殊种类。聚合用来表示“拥有”关系或者整体与部分的关系;而合成则用来表示一种强的多的“拥有”关系。在一个合成关系里,部分和整体的生命周期是一样的。一个合成的新的对象完全拥有对其组成部分的支配权,包括他们的创建和湮灭等。使用程序语言的术语讲,组合而成的新对象对组成部分的内存分配、内存释放有绝对的责任。

     更进一步讲,一个合成的多重性不能超过1,换言之,一个合成关系中的成分对象是不能与另一个合成关系共享的。一个成分对象在同一个时间内只能属于一个合成关系。如果一个合成关系湮灭了,那么所有的成分对象要么自己湮灭所有的成分对象,那么就得将这一责任交给别人。

二、复用的基本种类

     在面向对象的设计里,有两种基本的办法可以在不同的环境中复用已有的设计和实现,即通过合成/聚合或通过继承。这两种不同的复用方式在可维护性上有何区别呢?

1、合成/聚合复用

     由于合成或聚合可以将已有的对象纳入到新的对象中,使之成为新对象的一部分,因此新的对象可以调用已有的对象功能。这样做有如下好处:

  •  新对象存取成分对象的唯一方法是通过成分对象的接口。
  • 这种复用是黑箱复用,因为成分对象的内部细节是新对象所看不见的。
  • 这种复用支持包装。
  • 这种复用所需的依赖较少
  • 每一个新的类可以将焦点集中在一个任务上
  • 这种复用可以在运行时间内动态进行,新对象可以动态的引用与成分类型相同的对象。

     一般来说,如果一个角色得到了更多的责任,那么可以使用合成/聚合关系将新的责任委派到合适的对象。当然,这种复用也有缺点。最主要的缺点就是通过使用这种复用构造的系统会有较多的对象需要管理。

2、通过继承达到复用

     合成/聚合可以应用到几乎所有的环境中,而继承只能应用到很有限的一些环境中。并且我们是使用过程中,首先需要考虑合成/聚合,而不是继承。

     继承复用通过扩展一个已有对象的实现来得到新的功能,基类明显的捕获共同的属性和方法,而子类通过增加新的属性和方法来扩展超类的实现。继承是类型的复用。

     ①继承复用的优点:新的实现较为容易,因为超类的大部分功能可以通过继承关系自动进入子类;修改或扩展继承而来的实现较为容易。

     ②继承复用的缺点:继承复用破坏包装,因为继承将超类的实现细节暴露给子类。由于超类的内部细节常常是对子类型透明的,因此这种复用是透明复用;如果超类发生改变,那么子类的实现也不得不发生改变。这种改变具有传递性,将一级一级的传递下去;从超类继承而来的实现是静态的,不可能在运行时间内发生改变,因此没有足够的灵活性。

三、区分Has-A和Is-A

     Is-A是严格的分类学意义上的定义,意思是一个类是另一个类的“一种”。而Has-A则不同,他表示一个角色具有某一项责任。 导致错误的使用继承而不是合成/聚合的一个常见原因是错误的把Has-A当做Is-A。Is-A代表一个类是另一个类的一种;Has-A代表一个类是另一个类的一个角色,而不是另一个特殊种类。

 

 

本文通过总结《java与模式》而来。

分享到:
评论

相关推荐

    韩顺平-设计模式1

    合成/聚合复用原则(CARP)推荐优先使用对象的组合/聚合,而不是继承,因为组合/聚合具有更高的灵活性和更低的耦合度。 通过深入学习和实践这些设计模式和原则,开发者可以提升自己的编程技能,编写出更高质量、更...

    软件设计的七大原则.doc

    五、 合成/聚合复用原则(CARP) 合成/聚合复用原则是指在一个新的对象里面使用一些已有的对象,使之成为新对象的一部分;新对象通过向这些对象的委派达到复用已有功能的目的。简而言之,要尽量使用合成/聚合,尽量...

    设计模式六大原则 .docx

    6、合成/聚合复用原则(CARP) 合成/聚合复用原则主张优先使用对象的组合/聚合,而非继承来实现复用。组合和聚合允许不同对象以松散耦合的方式协作,而继承可能导致紧密耦合和类层次结构的膨胀。例如,桥接模式利用...

    软件设计的七大原则

    五、 合成/聚合复用原则(CARP) 合成/聚合复用原则是指在一个新的对象里面使用一些已有的对象,使之成为新对象的一部分;新对象通过向这些对象的委派达到复用已有功能的目的。简而言之,要尽量使用合成/聚合,尽量...

    合成复用原则.doc

    合成复用原则(Composite Reuse Principle,CRP),又称组合/聚合复用原则(Composition/Aggregate Reuse Principle,CARP),是在面向对象设计中的一项重要指导原则。该原则强调:在进行软件复用时,应优先考虑使用...

    java面向对象设计的六大原则

    DIP)、接口隔离原则(Interface Segregation Principle, ISP)以及合成/聚合复用原则(Composite/Aggregate Reuse Principle, CARP)。 #### 1. 单一职责原则(Single Responsibility Principle, SRP) - **定义...

    面向对象的设计原则

    5. **合成/聚合复用原则 (CARP)** - **定义**:这一原则提倡使用合成/聚合而非继承来进行代码复用。这意味着,当你需要复用某些功能时,优先考虑通过组合的方式来实现,而不是通过继承。 - **优点**:提高了...

    2023年最新java面试题及答案

    6、合成/聚合复用原则(Composition/Aggregation Reuse Principle,CARP)优先使用对象的组合/聚合,而不是继承来达到复用的目的。组合/聚合允许在运行时动态地改变对象结构,而继承则在编译时就固定了类的结构。...

    23种设计模式,及设计模式的七种设计原则的文档和Java代码实现

    7. 合成/聚合复用原则(Composition/Aggregation Reuse Principle, CARP):优先使用对象的组合/聚合,而不是继承,以降低类之间的耦合。 接下来,我们详细探讨一下23种设计模式: 1. 创建型模式(Creational ...

    设计模式 试题

    对象适配器模式是**合成/聚合复用原则**(选项A)的一个典型应用。它允许类使用一个不同的接口工作,通过组合现有的类来实现所需的接口。 ### 静态工厂模式与工厂方法模式的区别 虽然两者都用于对象的创建,但是...

    Java与模式

    ### 第10章:合成/聚合复用原则(CARP) 合成/聚合是一种重要的复用机制,本章对比了合成和聚合的差异,探讨了复用的基本类型,并从代码重构的角度阐述了如何有效应用合成/聚合原则,以增强代码的可维护性和可扩展...

    一些面向对象的设计法则

    7. **合成/聚合复用原则(Composition/Aggregation Reuse Principle, CARP)** - 优先使用对象的组合/聚合,而不是继承来实现复用。 - 组合和聚合提供了更灵活的设计,因为它们不改变类的继承层次结构。 8. **干洁...

    面向对象设计原则:突破软件工程学习的质的飞跃

    5. **合成/聚合复用原则(Composite/Aggregate Reuse Principle, CARP)**:推荐通过组合或聚合的方式复用代码,而不是使用继承。这种方法可以避免继承带来的复杂性和不稳定性,提高代码的复用性和可维护性。 6. **...

    面向对象设计原则

    ### 合成/聚合复用原则(CARP) 合成/聚合复用原则主张通过组合对象来实现复用,而不是通过继承。这是因为继承带来的紧密耦合往往会导致“脆弱的基类”问题,即基类的小改动可能会影响到所有继承它的子类。相比之下...

    C#设计模式大全

    - **合成/聚合复用原则(CARP)**:优先使用组合或聚合而不是继承来实现复用。 - **迪米特法则(LoD)**:一个对象应该只与它的直接朋友通信。 #### 四、创建型设计模式 - **简单工厂(SimpleFactory)模式**:...

    面向对象七大原则

    合成/聚合复用原则(Composite/Aggregate Reuse Principle, CARP) 合成/聚合复用原则主张通过合成/聚合的方式复用代码,而不是通过继承。 **关键知识点:** - **定义:** 使用组合而非继承来复用代码。 - **实现...

    JAVA设计模式学习【技术文档】

    - 合成/聚合复用原则(Composite/Aggregate Reuse Principle,CARP):优先使用对象的组合而不是继承来达到复用的目的。这鼓励了使用聚合关系(即组合)来增加对象间的复用性,而非继承。 - 单一职责原则(Law of ...

    OOP设计原则

    6. **合成/聚合复用原则(Composite/Aggregate Reuse Principle, CARP)** 这个原则提倡优先使用组合或聚合(对象的引用)而不是继承来实现复用。因为继承关系会形成强耦合,而组合或聚合则允许更大的灵活性和独立...

    C#版设计模式

    十、合成/聚合复用原则(CARP) 合成/聚合复用原则提倡在可能的情况下使用对象的组合(has-a关系)而不是类的继承(is-a关系)。这样做可以减少系统的层次结构,并且更加灵活。 十一、迪米特法则(LoD) 迪米特法则...

Global site tag (gtag.js) - Google Analytics