码迷,mamicode.com
首页 > 其他好文 > 详细

合成聚合原则

时间:2020-03-21 11:27:20      阅读:73      评论:0      收藏:0      [点我收藏+]

标签:特殊   功能   href   code   程序   依赖   room   sdn   复用   

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

合成聚合原则

标签:特殊   功能   href   code   程序   依赖   room   sdn   复用   

原文地址:https://www.cnblogs.com/wq-7047/p/12537241.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!