关于JAVA的聚合组合

关于JAVA的聚合组合

聚合
聚合是关联关系的一种特例,他体现的是整体与部分、拥有的关系,即has-a的关系。是一种较强的关联关系,在聚合关系中,两个类是处在不平等层次上的,一个代表整体,另一个代表部分。整体与部分之间是可分离的,他们可以具有各自的生命周期,部分可以属于多个整体对象,也可以为多个整体对象共享。

组合
组合是一种比聚合关联关系更强的关系,它包含于聚合关系中又称强聚合,它要求普通的聚合关系中代表整体的对象负责代表部分对象的生命周期。

组合和聚合在本质上是有很大区别的:
比如A类中包含B类的一个引用b,当A类的一个对象消亡时,b这个引用所指向的对象也同时消亡(没有任何一个引用指向它,成了垃圾对象),这种情况叫做组合,反之b所指向的对象还会有另外的引用指向它,这种情况叫聚合。

在实际写代码时组合方式一般会这样写:
A类的构造方法里创建B类的对象,也就是说,当A类的一个对象产生时,B类的对象随之产生,当A类的这个对象消亡时,它所包含的B类的对象也随之消亡。
聚合方式则是这样:
A类的对象在创建时不会立即创建B类的对象,而是等待一个外界的对象传给它
传给它的这个对象不是A类创建的。

光看文字可能理解不了,我们再来看两个代码
1、现实生活中,人和手,脚是组合关系,因为当人死后手和脚就不复存在了。
人和电脑就是聚合的关系
class Hand{}
class Computer{}
组合:
class Person{
private Hand hand;
public Person(){ //组合:hand对象在Person构造器中创建对象,hand对象的引用会存放在Person对象堆内存中;
hand=new Hand();
}
}
聚合:
class Person{
private Computer computer;
public setComputer(){ //聚合:computer对象在set方法里创建,然后创建computer对象,
//此时computer对象的引用存放在栈区,然后将computer对象的地址值赋给Person对象堆 //中的的computer属性(成员变量);
computer = new Computer();
}
}

2、
一个关联关系是聚合还是组合,需要根据实际的业务需求来断定。为什么这么说,因为可能相同超类和子类,在不同的业务场景,关联关系会发生变化。

就拿打车软件来说,
如果公司规定司机入驻时必须有一辆自己的车才能去载客,此时Driver和Car是组合关系,

在这里插入图片描述
如果公司规定只要司机会开车,公司各种车任你挑去载客,此时Driver和Car是聚合关系

在这里插入图片描述

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值