一、什么是多重性(Multiplicity)

定义

多重性(Multiplicity) 表示一个类与另一个类之间的数量关系,即:
“一个对象能关联多少个另一个对象?”
例如:
  • 一个 Customer 可以拥有多个 Order
  • 一个 Order 只能属于一个 Customer

二、常见多重性符号与含义

UML符号
含义
Java对应
1
恰好一个
普通对象引用
0..1
零个或一个
可空对象引用(nullable)
*
任意多个(0到多)
集合(List、Set)
1..*
至少一个
非空集合(必须有元素)
n..m
n到m个之间
特殊约束(较少见)

三、在类图中的表示方式

多重性标注通常写在关联的连线两端
例如:
说明:
  • 左侧 Customer 的多重性是 1,表示每个订单都有一个顾客。
  • 右侧 Order 的多重性是 0..*,表示一个顾客可以下多个订单。

四、对应到 Java 的实现方式

我们来看几种典型情况。

一对一(1 —— 1)

说明:
  • 每个 Person 恰好有一个 Passport。
  • 每个 Passport 也只属于一个 Person。

一对零或一(1 —— 0..1)

说明:
  • 每个员工“可能”有一个停车位。
  • 即 ParkingSpace 可以为 null

一对多(1 —— 0..*)

说明:
  • 一个顾客可以有多个订单。
  • 一个订单只能属于一个顾客。

多对一(0..* —— 1)

说明:
  • 多个订单可以属于同一个顾客。
  • 一个订单只属于一个顾客。

多对多(0..* —— 0..*)

说明:
  • 一个学生可以有多门课程。
  • 一名课程可以有多个学生。
在数据库建模中,这通常会变成中间表(多对多关系表)

六、进阶:多重性与组合、聚合结合

多重性经常与 聚合(Aggregation)或组合(Composition)关系一起使用,用于描述“整体–部分”之间的数量约束。

组合 + 多重性

含义:
  • 每个房子必须至少有一个房间。
  • 房间不能独立存在(组合)。

聚合 + 多重性

含义:
  • 部门可以没有员工(0..*)。
  • 员工可以属于多个部门(视具体业务而定)。

七、实战小技巧与经验总结

设计需求
UML多重性
Java建模建议
对象必须存在
1
非空对象引用
对象可选
0..1
Optional<>null
多个对象(可空)
0..*
List<>
多个对象(必至少一个)
1..*
初始化非空集合并校验
固定数量
n..m
逻辑校验或使用数组

🧩 示例:订单系统完整多重性设计

📘 含义:
  • 一个顾客可以有多个订单(0..*)
  • 每个订单至少有一个订单项(1..*)
  • 每个订单项必须对应一个商品(1)
对应 Java:

八、总结(核心记忆表)

UML
读法
Java对应
1
恰好一个
普通引用
0..1
零个或一个
可空引用
*
任意多个
可空集合
1..*
至少一个
非空集合
n..m
n到m个
特殊约束
 
UML笔记——类图中的导航方向UML笔记:类图
Loading...