组合(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即可。

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值