参考文章:UML类图几种关系的总结
在uml类图中,常见的关系有 泛化=实现>组合>聚合>关联>依赖
不过组合、聚合、关联、依赖之间的关系有些难以区分
参考《java与模式》书中的描述,对他们之间的区分清晰了些
1、关联关系
是类与类之间的联接,它使一个类知道另一个类的属性和方法
在java语言中,关联关系是使用实例变量实现的。如在上面的Driver类中就出现了一个类型为Car的实例变量,这个变量实现了这两个类之间的关联关系。
2、聚合关系
聚合关系是关联关系的一种,是强的关联关系。聚合式整体和个体之间的关系。例如,汽车类和引擎类、轮胎类及其他零件类之间的关系便是整体与个体之间的关系。
与关联一样,聚合也是通过实例变量实现的。但是关联关系所涉及的两个类是处在同一层次上的。而在聚合关系中,两个类是处在不平等的层次上的,一个代表整体,另一个代表部分。
关联与聚合在java语法上是无法分辨的,需要考察所涉及的类之间的逻辑关系。
3、组合关系
组合关系是关联关系的一种,是比聚合关系强的关系。它要求普通的聚合关系中代表整体的对象负责代表部分的对象的生命周期,组合关系是不能共享的。
4、依赖关系
依赖关系也是类与类之间的连接,依赖总是单向的。依赖关系表示一个类依赖于另一个类的定义。
如:一个人Person 可以买车Car 和房子 House ,Person类依赖Car类和House类
在上面例子中,Person类依赖Car类和House类的定义,因为Person类引用了Car和House
与关联不同的是,Person类中并没有Car和House类型的属性,Car和House的实例是以参量的方式传入到buy()方法中的。
public class Person{
public void buy(Car car){
}
public void buy(House house){
}
}
一般而言,依赖关系在java语言中体现为局域变量、方法的参量以及对静态方法的调用。
而如果一个类出现在另一个类的实例变量中,那么类A和类B的关系就超越了依赖关系,而变成了某一种关联关系