Mermaid 类图 #
类图(Class Diagram)是面向对象设计的核心图表之一,用于展示类的结构、属性、方法以及类之间的关系。
基本语法 #
1. 类的定义 #
类由类名、属性(成员变量)和方法(成员函数)组成:
mermaid
classDiagram
class Person {
+name: string
+age: int
+address: string
+eat(): void
+sleep(): void
+work(): void
}
2. 访问修饰符 #
| 修饰符 | 含义 | 表示符号 |
|---|---|---|
| Public | 公共的 | + |
| Private | 私有的 | - |
| Protected | 受保护的 | # |
| Internal | 内部的 | ~ |
mermaid
classDiagram
class Person {
-id: int // 私有属性
+name: string // 公共属性
#age: int // 受保护属性
~address: string // 内部属性
+getName(): string // 公共方法
-validateId(): boolean // 私有方法
#calculateAge(): void // 受保护方法
~updateAddress(): void // 内部方法
}
类之间的关系 #
1. 继承关系(Generalization) #
表示"is-a"关系,子类继承父类的属性和方法:
mermaid
classDiagram
class Animal {
+name: string
+eat(): void
+sleep(): void
}
class Dog {
+breed: string
+bark(): void
}
class Cat {
+color: string
+meow(): void
}
Animal <|-- Dog
Animal <|-- Cat
2. 实现关系(Realization) #
表示类实现接口的关系:
mermaid
classDiagram
class Printable {
<<interface>>
+print(): void
}
class Document {
+print(): void
}
class Image {
+print(): void
}
Printable ..|> Document
Printable ..|> Image
3. 关联关系(Association) #
表示对象之间的引用关系:
mermaid
classDiagram
class User {
+id: int
+name: string
}
class Order {
+id: int
+total: decimal
}
User --> Order
4. 聚合关系(Aggregation) #
表示"has-a"关系,整体和部分是可分离的:
mermaid
classDiagram
class Department {
+name: string
}
class Employee {
+name: string
}
Department o-- Employee
5. 组合关系(Composition) #
表示强"has-a"关系,整体和部分不可分离:
mermaid
classDiagram
class Car {
+brand: string
}
class Engine {
+power: int
}
class Wheel {
+size: int
}
Car *-- Engine
Car *-- Wheel
6. 依赖关系(Dependency) #
表示一个类依赖于另一个类:
mermaid
classDiagram
class Customer {
+name: string
}
class Order {
+total: decimal
+process(customer: Customer): void
}
Order ..> Customer
关系的多重性 #
多重性表示关系中对象的数量:
| 符号 | 含义 |
|---|---|
| 0…1 | 零个或一个 |
| 1 | 恰好一个 |
| 0…* | 零个或多个 |
| 1…* | 一个或多个 |
| n | 恰好n个 |
| n…m | n到m个 |
mermaid
classDiagram
class Company {
+name: string
}
class Employee {
+name: string
}
Company "1" -- "1..*" Employee
接口与抽象类 #
1. 接口 #
接口使用<<interface>>标记:
mermaid
classDiagram
class Shape {
<<interface>>
+calculateArea(): double
+calculatePerimeter(): double
}
class Circle {
+radius: double
+calculateArea(): double
+calculatePerimeter(): double
}
class Rectangle {
+width: double
+height: double
+calculateArea(): double
+calculatePerimeter(): double
}
Shape ..|> Circle
Shape ..|> Rectangle
2. 抽象类 #
抽象类使用<<abstract>>标记:
mermaid
classDiagram
class AbstractAnimal {
<<abstract>>
+name: string
+abstract eat(): void
+sleep(): void
}
class Dog {
+eat(): void
}
AbstractAnimal <|-- Dog
枚举 #
枚举使用<<enumeration>>标记:
mermaid
classDiagram
class Color {
<<enumeration>>
RED
GREEN
BLUE
YELLOW
BLACK
}
class Car {
+color: Color
}
Car --> Color
高级功能 #
1. 注释 #
可以为类和关系添加注释:
mermaid
classDiagram
class Person {
+name: string
+age: int
%% 这是一个注释
+work(): void
}
class Company {
+name: string
}
%% 人员与公司的关系
Person --> Company
2. 类样式 #
可以为类添加自定义样式:
mermaid
classDiagram
class Person {
+name: string
+age: int
}
class Company {
+name: string
}
Person --> Company
classDef highlight fill:#f96,stroke:#333,stroke-width:2px;
class Person,Company highlight;
3. 内部类 #
可以定义内部类:
mermaid
classDiagram
class OuterClass {
+outerMethod(): void
class InnerClass {
+innerMethod(): void
}
}
最佳实践 #
- 清晰的类命名:使用有意义的类名,采用驼峰命名法
- 合理的关系表示:选择合适的关系类型(继承、关联、聚合等)
- 适当的多重性:明确关系中对象的数量限制
- 清晰的访问修饰符:正确使用
+、-、#、~等修饰符 - 避免过度复杂:将复杂的类图分解为多个子图
常见问题 #
问题:关系箭头方向不正确 #
解决方案:确保关系箭头的方向正确表示类之间的依赖关系
问题:多重性显示不正确 #
解决方案:正确使用多重性符号,如1..*表示一个或多个
问题:接口实现关系不明显 #
解决方案:使用<<interface>>标记接口,并使用..|>表示实现关系
完整示例 #
下面是一个完整的订单管理系统类图示例:
mermaid
classDiagram
%% 接口定义
class Serializable {
<<interface>>
+serialize(): string
+deserialize(data: string): void
}
%% 枚举定义
class OrderStatus {
<<enumeration>>
PENDING
PAID
SHIPPED
DELIVERED
CANCELLED
}
%% 实体类
class Customer {
-id: int
+name: string
+email: string
+address: string
}
class Product {
-id: int
+name: string
+price: decimal
+stock: int
}
class Order {
-id: int
+customer: Customer
+status: OrderStatus
+total: decimal
+orderDate: Date
+addItem(item: OrderItem): void
+calculateTotal(): decimal
}
class OrderItem {
-id: int
+product: Product
+quantity: int
+price: decimal
+getSubtotal(): decimal
}
%% 关系定义
Customer "1" -- "0..*" Order
Order "1" -- "1..*" OrderItem
OrderItem "1" -- "1" Product
Order --> OrderStatus
%% 接口实现
Customer ..|> Serializable
Product ..|> Serializable
Order ..|> Serializable
OrderItem ..|> Serializable
最后更新:2026-02-08