依赖 关联 聚合 组合

依赖 < 关联 < 聚合 < 组合

1 依赖
语义:a use b。依赖是局部变量、形参、静态方法、返回参数
生命周期中对象依赖关系:当f方法被调用时,A与B产生依赖关系,当调用结束,依赖关系结束
class A{
  void f(B b){
    b.x
  }
}

a 虚线箭头指向 b
 

2 关联
class Soldier{
  private Gun gun;
  public void setGun(Gun gun){
    this.gun = gun;
  }
}

语义:a has b
士兵可以有枪,也可以没有枪,是一种松散的耦合关系。而且士兵可以通过setGun()随时换一把枪
生命周期中对象依赖关系:士兵和枪各自不负责对方的生命周期,士兵销毁了枪任然在,枪销毁了士兵任然在。只不过只有士兵销毁后,士兵与枪的依赖关系才回解除。策略模式应当典型的关联(策略可以随时替换)

a实线箭头指向b

3 聚合
语义:a owns b
a拥有b的引用,a和b有明显的从属关系,但是a任然不负责b的生命周期的管理。b任然可能被其它的对象所引用。
聚合和关联需要根据具体语义区别,典型例子:
狼群类 和 狼 就是聚合例子。容器List和容器中的元素,应当是一种典型的聚合关系

a 空心菱形连接 b

4 组合
语义:b is a part of b
b需要负责a的生命周期的管理,例如人和人脑:
class Person{
  private Brain brain;
  public Person(){
    brain=new Brain();
  }
  public Person(Brain brain){
    this.brain = brain;
  }
}
人脑在一般情况下,应答完全属于一个人。即使使用spring注入人脑,也应该使用构造器注入才合理,使人一旦创建,就是有脑的状态。这也说明人管理了人脑的声明周期。

a(Person)实心菱形连接 b(Heart)

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值