Java中对象关系有依赖、关联、聚合、组合四种:依赖最弱,表现为临时使用;关联是长期引用;聚合为可独立存在的“整体-部分”;组合为生命周期绑定的强“整体-部分”。

Java中对象之间的关系主要有四种:依赖、关联、聚合和组合。它们描述了类与类之间不同程度的连接强度和生命周期依赖,是设计高质量面向对象系统的基础。
依赖(Dependency)
依赖是最弱的一种关系,表示一个类临时使用另一个类,通常表现为方法参数、局部变量或静态方法调用。被依赖的类不作为成员变量存在,也不影响其生命周期。
- 典型写法:方法内 new 对象、传入参数、调用工具类静态方法
- UML 表示:带箭头的虚线,箭头指向被依赖方
- 例子:
public void print(User user)中 User 是依赖;JSON.parse(jsonStr)依赖 Jackson 或 Gson 工具类
关联(Association)
关联是一种长期、结构化的引用关系,体现为一个类持有另一个类的引用(成员变量),双方生命周期独立,可单向或双向。
- 常见形式:成员变量 + getter/setter,如
private Order order; - 可带多重性:如“一个客户对应多个订单”,即 1..* 关联
- 注意:不要和“继承”混淆——关联是“has-a”,继承是“is-a”
聚合(Aggregation)
聚合是关联的特例,强调“整体-部分”关系,但部分可以独立存在,生命周期不受整体控制。语义上更强调松耦合的组成结构。
立即学习“Java免费学习笔记(深入)”;
- 关键特征:“部分”可被多个“整体”共享,也可单独存在
- 例子:大学(University)和教师(Teacher)——教师不属于某所大学独有,离职后依然存在
- UML 表示:空心菱形 + 实线,菱形靠近整体端
组合(Composition)
组合是更强的“整体-部分”关系,部分不能脱离整体而存在,整体负责部分的创建与销毁,生命周期完全绑定。
- 典型场景:内部对象在构造时创建,且不出现在外部上下文中
- 例子:订单(Order)和订单项(OrderItem)——删除订单,所有订单项自动失效;人和心脏——不可分离
- UML 表示:实心菱形 + 实线,菱形靠近整体端
区分聚合与组合的关键,在于思考“部分对象能否脱离整体独立存在”。能,就是聚合;不能,就是组合。实际开发中,组合更常见于强内聚模块,聚合多用于资源共享场景。基本上就这些。











