`
student_lp
  • 浏览: 432033 次
  • 性别: 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) 合成/聚合复用原则是指在一个新的对象里面使用一些已有的对象,使之成为新对象的一部分;新对象通过向这些对象的委派达到复用已有功能的目的。简而言之,要尽量使用合成/聚合,尽量...

    设计模式,软件开发者必读

    1.5.5 合成/聚合复用原则(CARP) 9 1.5.6 迪米特法则(LAW OF DEMETER LOD) 10 1.5.7 单一职责原则(SIMPLE RESPONSIBILITY PINCIPLE SRP) 10 创建型模式 11 2.1 SINGLETON单件模式 11 2.1.1 典型的SINGLETON类 11 ...

    2023年最新java面试题及答案

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

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

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

    一些面向对象的设计法则

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

    OOP设计原则

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

    面向对象设计原则解析

    6. **合成/聚合复用原则(Composition/Aggregation Reuse Principle, CARP)** 宁愿使用对象的组合或聚合,而非继承来实现代码的复用。组合与聚合允许动态地改变对象结构,相比继承更加灵活,且不会破坏封装性。 ...

    面向对象设计原则.ppt

    7. **合成/聚合复用原则(CARP)**:优先使用对象组合或聚合,而不是继承来实现代码复用。对象组合允许系统在运行时动态地调整行为,而继承可能导致紧耦合和“白箱复用”。 理解并应用这些原则,可以帮助我们设计出...

    61条面向对象设计的经验面试题

    7. **合成/聚合复用原则(Composite/Aggregation Reuse Principle, CARP)**:优先使用合成/聚合,而不是继承,以避免破坏封装和增加不必要的继承层次。 8. **YAGNI(You Aren't Gonna Need It)**:除非必要,否则...

    DesignPrinciples

    7. **合成/聚合复用原则(Composite/Aggregation Reuse Principle, CARP)**:优先使用对象的合成/聚合,而不是继承。合成和聚合允许你在运行时动态组合对象,而继承则在编译时固定了类的结构。 在Java中,这些原则...

    design-pattern:7大设计原则+ 23种设计模式(含UML类图)+设计模式在JDK中的源码分析Java语言

    7. 合成/聚合复用原则(Composite/Aggregate Reuse Principle, CARP):优先使用对象的组合/聚合,而不是继承,以增强软件的灵活性和可维护性。 接下来,我们来看看23种设计模式,它们分为三大类: 1. 创建型模式...

    面向对象设计模式的核心法则

    5. 合成/聚合复用原则(Composition/Aggregation Reuse Principle, CARP):优先使用对象的合成或聚合而非继承。通过组合多个对象,我们可以创建更复杂的结构,同时保持每个对象的职责单一,避免了类继承可能导致的...

    DESIGN-PRINCIPLE

    7. **合成/聚合复用原则(Composite/Aggregation Reuse Principle, CARP)**: 尽量使用对象的组合或聚合,而不是继承来达到代码复用的目的。因为继承可能会导致紧耦合,而组合或聚合更加灵活。 在"DESIGN-...

    Design-Priciples

    7. **合成/聚合复用原则(Composition/Aggregation Reuse Principle, CARP)**:优先使用对象组合,而不是继承来达到复用的目的。在Java中,组合允许更灵活的代码结构,降低了类间的耦合。 在“Design-Priciples-...

    MeghanaJilla_DesignPrinciples

    7. **合成/聚合复用原则(Composite/Aggregate Reuse Principle, CARP)**:优先使用对象的组合或聚合,而不是继承来实现代码复用。这有助于避免由于继承带来的复杂性和脆弱性。 这些原则是面向对象设计的基础,...

Global site tag (gtag.js) - Google Analytics