聚合、组合、依赖、关联关系的区别
本文最后更新于67 天前,其中的信息可能已经过时,如有错误请发送邮件到3082654005@qq.com

要清晰区分 UML 中的聚合关系、组合关系、依赖关系、关联关系,可通过 “关系性质、耦合程度、生命周期关联、实例关系、UML 符号、典型场景” 等核心维度对比,以下是结构化表格:

对比维度依赖关系 (Dependency)关联关系 (Association)聚合关系 (Aggregation)组合关系 (Composition)
核心定义一方(依赖方)临时使用另一方(被依赖方)的功能,无结构关联双方存在稳定的结构关联(如持有引用),是最基础的对象间关系「整体 – 部分」关系,部分可脱离整体独立存在「整体 – 部分」关系,部分无法脱离整体独立存在
耦合程度最松散(临时调用,无长期引用)中等(稳定引用,无生命周期绑定)较紧(整体包含部分,部分可复用)最紧(整体控制部分的生死)
生命周期关联无关联(依赖方销毁不影响被依赖方,反之亦然)无关联(双方生命周期独立,如学生毕业不影响课程)无强关联(整体销毁,部分可继续存在,如汽车报废轮胎可再用)强关联(整体创建→部分创建,整体销毁→部分销毁,如人死亡后心脏无意义)
实例关系依赖方仅在特定行为中使用被依赖方(如 “订单服务” 调用 “日志工具类” 打日志)一方可持有另一方的引用(如 “学生” 持有 “课程” 的列表,“课程” 也可持有 “学生” 的列表)整体包含部分,部分可属于多个整体(如 “轮胎” 可属于 “汽车 A”,也可拆下来装到 “汽车 B”)整体包含部分,部分仅属于一个整体(如 “部门” 只能属于一个 “公司”,不能同时属于两个公司)
UML 符号虚线 + 箭头(箭头指向被依赖方,表示 “依赖方→依赖→被依赖方”)实线(可加箭头表示单向关联,无箭头默认双向)空心菱形(在整体端) + 实线(连接整体与部分)实心菱形(在整体端) + 实线(连接整体与部分)
典型场景示例1. 工具类调用(如 OrderService.log() 调用 LogUtil.print()
2. 方法参数 / 返回值(如 void addUser(User user) 中 User 是依赖)
1. 学生与课程(学生选课程,课程包含学生)
2. 客户与订单(客户创建订单,订单归属客户)
1. 汽车与轮胎(轮胎可拆换,用于其他汽车)
2. 图书馆与图书(图书可外借,脱离图书馆存在)
1. 公司与部门(部门随公司创建而创建,随公司解散而撤销)
2. 人与心脏(心脏无法脱离人独立存在)

核心区别总结

  1. 是否为 “整体 – 部分” 关系
    • 聚合、组合是「整体 – 部分」关系;依赖、关联不是(依赖是 “使用”,关联是 “结构关联”)。
  2. 部分能否脱离整体
    • 聚合:能(轮胎≠汽车);组合:不能(心脏 = 人的一部分)。
  3. 生命周期是否绑定
    • 组合:强绑定(整体控部分生死);聚合 / 关联 / 依赖:无绑定。
  4. 耦合松紧
    组合 > 聚合 > 关联 > 依赖(依赖最灵活,组合最稳定但耦合最高)。
文末附加内容
暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇