合成聚合原则

Posted wq-7047

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了合成聚合原则相关的知识,希望对你有一定的参考价值。

1定义

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

2合成和聚合的区别

合成和聚合都是关联的特殊种类。用C语言来讲,合成是值的聚合,聚合是则是引用的聚合。

聚合用来表示“拥有”关系或者整体与部分的关系。代表部分的对象有可能会被多个代表整体的对象所共享,而且不一定会随着某个代表整体的对象被销毁或破坏而被销毁或破坏,部分的生命周期可以超越整体。例如,班级和学生,当班级删除后,学生还能存在,学生可以被培训机构引用。

技术图片

图1聚合关系

class Student {

}

class Classes{

         private Student student;

         public Classes(Student student){

                   this.student=student;

        }

}

合成用来表示一种强得多的“拥有”关系。在一个合成关系里,部分和整体的生命周期是一样的。一个合成的新对象完全拥有对其组成部分的支配权,包括它们的创建和湮灭等。使用程序语言的术语来说,合成而成的新对象对组成部分的内存分配、内存释放有绝对的责任。 一个合成关系中的成分对象是不能与另一个合成关系共享的。一个成分对象在同一个时间内只能属于一个合成关系。

技术图片

图2合成关系

class Room{

         public Room createRoom(){

                   System.out.println(“创建房间”);

                   returnnew Room();

          }

 }

class House{

         private Room room;

         public House(){

               room=new Room();

          }

         public void createHouse(){

               room.createRoom();

         }

  }

3优点及缺点

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

(1)      新对象存取成分对象的唯一方法是通过成分对象的接口。

(2)      这种复用是黑箱复用,因为成分对象的内部细节是新对象看不见的。

(3)      这种复用支持包装。

(4)      这种复用所需的依赖较少。

(5)      每一个新的类可以将焦点集中到一个任务上。

(6)      这种复用可以再运行时间内动态进行,新对象可以动态地引用与成分对象类型相同的对象。

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

 

参考链接:

https://blog.csdn.net/u010832572/article/details/45007933

以上是关于合成聚合原则的主要内容,如果未能解决你的问题,请参考以下文章

合成聚合原则

合成聚合原则

合成聚合原则

设计模式软件设计七大原则 ( 合成复用原则 | 代码示例 )

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

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