参考 :blog
依赖关系 : 在Java语言中体现为局域变量、方法的形参,或者对静态方法的调用。
class Driver { //使用形参方式发生依赖关系 public void drive1(Car car){ car.run(); } //使用局部变量发生依赖关系 public void drive2(){ Car car = new Car(); car.run(); } //使用静态变量发生依赖关系 public void drive3(){ Car.run(); } }
关联 ,聚合 ,组合 ,耦合度逐渐增加!都是关联关系!
以司机和车的关系为例:
关联 :“车不是我的,我只是个司机,别人给我什么车我就开什么车,我使用这个车。”
它使一个类知道另一个类的属性和方法。例如如果A依赖于B,则B体现为A的全局变量。如person类和company类
class Driver { //使用成员变量形式实现关联 Car mycar; public void drive(){ mycar.run(); } ... //使用方法参数形式实现关联 public void drive(Car car){ car.run(); } }
聚合: 一般使用成员变量形式实现,一般使用setter方法给成员变量赋值“车是一辆私家车,是司机财产的一部分”车的生命周期与司机无关
聚合关系是整体和个体的关系 ,普通关联关系的两个类处于同一层次上,而聚合关系的两个类处于不同的层次,一个是整体,一个是部分
class Driver { //使用成员变量形式实现聚合关系 Car mycar; public void drive(){ mycar.run(); } }
组合 : "车是司机的必须有的财产,要想成为一个司机必须要先有辆车,车要是没了,司机也不想活了。而且司机要是不干司机了,这个车就砸了,别人谁也别想用" ------ 相互依赖,而前面两种还构不成这么强的耦合 , 一般通过构造方法给成员变量赋值!
public Driver(Car car){ mycar = car; }
关联、聚合、组合只能配合语义,结合上下文才能够判断出来,而只给出一段代码让我们判断是关联,聚合,还是组合关系,则是无法判断的。