组合(Composition)与聚合(Aggregation)

一、概念

聚合与组合都是一种关联关系,只是额外具有整体-部分的意义。

组合:Composition

contains-a关系。
通俗来讲就是,一样东西由另一些小的“零部件”组成。比如,一辆汽车是由发动机等零部件组成的,汽车包含了这些零部件。

优点:

1.不破坏封装,整体类与局部类之间松耦合,彼此相对独立。
2.具有较好的可扩展性。
3.支持动态组合。在运行时,整体对象可以选择不同类型的局部对象。
4.整体类可以对局部类进行包装,封装局部类的接口,提供新的接口。

缺点:

1.整体类不能自动获得和局部类同样的接口。
2.创建整体类的对象时,需要创建所有局部类的对象。

聚合:Aggregation

has-a关系。
一种东西本身就有其独立存在的意义,不受约束但属于某一样东西,比如,一个人有一辆车,车是属于人的,但是离开了人车还是车,依旧可以存在。

区别:

组合关系中,整件拥有部件的生命周期,所以整件删除时,部件一定会跟着删除。而且,多个整件不可以同时间共享同一个部件。

聚合关系中,整件不会拥有部件的生命周期,所以整件删除时,部件不会被删除。再者,多个整件可以共享同一个部件。

二、举例

// An example
class People{
  String name;  //人的名字属性
  String body;  //人的身体属性
  //省略getter、setter方法
}
class name{
  String first-name;  //人的名属性
  String last-name;  //人的姓属性
}
class body{
  String head;  //人的头属性
  String hand;  //人的手属性
}

人由身体所组成,应该由身体来组合为一个人,身体作为人的组合的一部分。体现在数据存储时,即不必将身体(body)存储在数据库中,而是直接作为人的属性存在。

而name,记录着一个人的名字信息,脱离People之后,可能会有别的地方依旧会使用到该属性。因此这个就是聚合,在设计实体类时,直接保存其ID即可。

发布了10 篇原创文章 · 获赞 0 · 访问量 164

猜你喜欢

转载自blog.csdn.net/fanqyoo/article/details/103031220