【设计模式】UML类图关系中的数量表示(详细版)

发布于:2025-09-08 ⋅ 阅读:(19) ⋅ 点赞:(0)

【设计模式】UML类图关系中的数量表示(详细版)

在UML类图中,数量表示(Multiplicity)用于精确描述类之间的关联关系中对象实例的数量对应关系。它位于关联连线的两端,表示"一个类的实例可以关联到多少个另一个类的实例"。

参考资料:UML基础教程资料

(关注不迷路哈!!!)



前言

常见数量表示符号及含义

标识 含义 示例场景
0…1 0个或1个(最多1个) 一个人可能有0或1个配偶
0…* 或 * 0个或多个(数量不限) 一个顾客可以有0或多个订单
1…11 只有1个(必须存在) 一辆汽车必须有且只有1个引擎
1…* 1个或多个(至少1个) 一个部门必须有1名或多名员工
n…m 特定数量范围 一个学期有12…16周课程

标准符号体系
在这里插入图片描述


一、数量表示的应用规则

基础概念可视化

  1. 位置规则
    • 数量标注位于关联关系的两端
    • 标注在靠近目标类的一端
  2. 语法规则
    • 使用两个数字表示范围,中间用"…"连接
    • 单个数字表示固定数量
    • ""表示无限多(等同于0…
  3. 双向关联的数量对应
    • 两端数量可以不同
    • 例如:公司(1)—(1…*)员工

二、典型应用场景示例

  1. 一对一关系(1:1)
    [身份证] "1" ———— "1" [人]
    

在这里插入图片描述

特征

  • 双向强制存在
  • 代码实现:互相持有对象引用
  1. 一对多关系(1:N)
    [公司] "1" ———— "*" [部门]
    

在这里插入图片描述

业务规则

  • 父项必须存在
  • 子项数量可扩展
  1. 多对多关系(M:N)
    [学生] "*" ———— "*" [课程]
    

在这里插入图片描述

实现方式

  • 需要中间关联表
  • 双向无限扩展
  1. 可选关系(0…1)
    [用户] "1" ———— "0..1" [会员卡]
    

在这里插入图片描述

三、数量表示的特殊情况

  1. 复合数量表示
    • 可以组合多个范围,用逗号分隔
    • 示例:1..3, 5..7 表示1-3个或5-7个

在这里插入图片描述

  1. 精确数量表示

    • 使用具体数字,如24
    • 示例:一副扑克有52张牌
      在这里插入图片描述
  2. 无限多表示

    • *0..*的简写
    • 表示数量没有上限限制

四、数量表示的设计意义

  1. 业务约束
    • 反映现实世界中的业务规则
    • 例如:一个订单必须关联至少1个商品
  2. 数据库设计指导
    • 直接影响数据库表的外键设计
    • 1:N关系通常转换为外键
    • M:N关系需要中间关联表
  3. 代码实现指导
    • 影响类的成员变量设计
    • 1对应对象实例
    • *对应集合类型

在这里插入图片描述

五、综合场景示例

场景1:汽车驾驶系统

[汽车] "1" ◆——— "4" [轮胎]
[汽车] "1" ◆——— "1" [引擎]
[车主] "1" ———— "0..*" [汽车]

解释:

  • 每辆汽车必须且只能有1个引擎
  • 每辆汽车必须有4个轮胎
  • 每个车主可以拥有0辆或多辆汽车
    在这里插入图片描述

场景2:商品订单系统

“每个订单(Order)必须包含1-20个商品(Item),每个商品可以属于0-5个促销活动(Promotion)”

在这里插入图片描述

场景3:学校管理系统

在这里插入图片描述

特征

  • 动态范围约束(4-8门课)
  • 资源分配关系(课程与教室)

场景4:医疗系统

在这里插入图片描述

特殊约束

  • 医生负载均衡(5-10个患者)
  • 患者可能无处方(术后观察期)

六、验证性问题

  1. 如何表示"每个用户必须绑定1-2个支付方式"?

在这里插入图片描述

  1. 若改为"至少1个,建议不超过3个"应如何调整?

在这里插入图片描述


总结

提示:拥抱变化,而不被变化摧毁!🚀

在这里插入图片描述

数量表示开发流程

  1. 通过数量表示捕获业务规则
  2. 驱动领域模型设计
  3. 指导集合类型选择
  4. 生成数据库约束

网站公告

今日签到

点亮在社区的每一天
去签到