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. 清晰的类命名:使用有意义的类名,采用驼峰命名法
  2. 合理的关系表示:选择合适的关系类型(继承、关联、聚合等)
  3. 适当的多重性:明确关系中对象的数量限制
  4. 清晰的访问修饰符:正确使用+-#~等修饰符
  5. 避免过度复杂:将复杂的类图分解为多个子图

常见问题 #

问题:关系箭头方向不正确 #

解决方案:确保关系箭头的方向正确表示类之间的依赖关系

问题:多重性显示不正确 #

解决方案:正确使用多重性符号,如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