当前位置: 首页 > news >正文

Typora绘制-类图

注意:类图的高亮新旧版本会正常显示

类图

mermaid官方网站文档教程链接(英文)

社区维护的中文文档站

1、新版本语法

classDiagram如下仅是基础的常用功能语法,如需更全面内容可参考官网教程文档

  • 访问修饰符

    +/-/#/~
    

    +公共、-私有、#受保护、~包私有(核心用+/-即可)

  • 类属性 / 方法

    - name: String
    

    属性:修饰符 + 名称 + 类型;方法:修饰符 + 名称 (参数) + 返回类型

  • 接口定义

    interface 接口名
    

    接口用 interface 声明,方法无实现

  • 抽象类 / 方法

    abstract class 类名/abstract 方法()
    

    抽象类 / 方法加 abstract 关键字

  • 类间关系速查表(核心!)

    关系类型 语法符号 示例 通俗解释
    继承(泛化) `-- >` A -- > B A 是 B 的子类(B 是父类)
    实现接口 `.. >` A .. > B A 实现 B 接口
    组合 --* A --* B A 包含 B,B 不能脱离 A 存在
    聚合 --o A --o B A 包含 B,B 可脱离 A 存在
    关联 --> A --> B A 关联 B(单向,如用户有订单)
    依赖 ..> A ..> B A 临时使用 B(如方法参数)
  • 注释规则

    • 单行注释:%% 注释内容(必须以 %% 开头,可放在行首 / 行尾);
    • 多行注释:无原生支持,需每行加 %%
  • 特殊规则(避坑重点)

    • 关系符号不能写反

      • 继承是「子类 --|> 父类」(如 Admin --|> User),写反会导致逻辑错乱;

      • 关联 / 依赖是「使用者 --> 被使用者」(如 User --> Order 表示用户关联订单)。

    • 访问修饰符位置正确

      • 修饰符必须在属性 / 方法前(如 - id: Long ✅,id: Long - ❌);

      • 无修饰符默认公共(+),但建议显式写清楚,提升可读性。

    • 旧版 Typora 兼容

      • 旧版 Mermaid 不支持 abstract 关键字,可去掉,仅用注释标注;
      • 接口定义 interface 在旧版中会显示为普通类,可改用 class 接口名 <<interface>> 兼容。
    • 特殊字符转义:类名 / 属性名含特殊符号(如 :/())时,需用反斜杠转义

    • 避免类名重复 / 关系过多

      • 类名必须唯一,重复会导致渲染异常;

      • 过多类间关系会让图杂乱,建议拆分多个类图(按模块分组)。

2、代码示例

示例1

classDiagram%% 类定义:类名 + 属性 + 方法class 类名 {访问修饰符 属性名: 类型访问修饰符 方法名(参数): 返回类型}%% 类间关系类A --|> 类B: 继承(泛化)类A --* 类B: 组合(整体包含部分,部分不能独立)类A --o 类B: 聚合(整体包含部分,部分可独立)类A --> 类B: 关联(单向依赖)类A ..> 类B: 依赖(临时使用)类A ..|> 类B: 实现接口

示例2

classDiagram%% 枚举class OrderStatus {<<enumeration>>PENDING_PAYMENTPAIDSHIPPEDCOMPLETEDCANCELLED}class PayType {<<enumeration>>WECHAT_PAYALIPAYUNION_PAY}%% 接口class Payable {<<interface>>pay(order, amount)refund(payRecord)}class Loggable {<<interface>>log(operation, content)}%% 抽象类class BaseEntity {<<abstract>>- id: Long- createTime: Date- updateTime: Date+ getId()+ getCreateTime()}class Product {<<abstract>>- name: String- price: Double- stock: Integer+ calculateFinalPrice()}%% 用户class User {- username: String- phone: String+ login()+ addAddress()}class Address {- province: String- city: String- detail: String+ getFullAddress()}%% 商品class PhysicalProduct {- weight: DoublecalculateFinalPrice()}class DigitalProduct {- downloadUrl: StringcalculateFinalPrice()}%% 订单class Order {- orderNo: String- totalAmount: Double- status: OrderStatus+ addOrderItem()+ calculateTotalAmount()+ changeStatus()+ log()}class OrderItem {- product: Product- quantity: Integer+ getItemTotal()}%% 支付class PayRecord {- payNo: String- amount: Double- payType: PayType+ log()}class WechatPay {+ pay()+ refund()}class Alipay {+ pay()+ refund()}%% 物流class Logistics {- logisticsNo: String- company: String+ updateTrack()}class LogisticsTrack {- status: String- time: Date- location: String}%% 继承User --|> BaseEntityProduct --|> BaseEntityPhysicalProduct --|> ProductDigitalProduct --|> ProductOrder --|> BaseEntityPayRecord --|> BaseEntity%% 实现接口Order ..|> LoggablePayRecord ..|> LoggableWechatPay ..|> PayableAlipay ..|> Payable%% 组合(整体-部分,不可分离)Order --* OrderItemLogistics --* LogisticsTrackUser --* Address%% 聚合(整体-部分,可分离)User --o OrderOrder --o Logistics%% 关联OrderItem --> ProductPayRecord --> OrderPayRecord --> PayTypeOrder --> OrderStatus%% 依赖WechatPay ..> OrderAlipay ..> PayRecord

3、效果示例

示例1

classDiagram%% 类定义:类名 + 属性 + 方法class 类名 {访问修饰符 属性名: 类型访问修饰符 方法名(参数): 返回类型}%% 类间关系类A --|> 类B: 继承(泛化)类A --* 类B: 组合(整体包含部分,部分不能独立)类A --o 类B: 聚合(整体包含部分,部分可独立)类A --> 类B: 关联(单向依赖)类A ..> 类B: 依赖(临时使用)类A ..|> 类B: 实现接口

示例2

classDiagram%% 枚举class OrderStatus {<<enumeration>>PENDING_PAYMENTPAIDSHIPPEDCOMPLETEDCANCELLED}class PayType {<<enumeration>>WECHAT_PAYALIPAYUNION_PAY}%% 接口class Payable {<<interface>>pay(order, amount)refund(payRecord)}class Loggable {<<interface>>log(operation, content)}%% 抽象类class BaseEntity {<<abstract>>- id: Long- createTime: Date- updateTime: Date+ getId()+ getCreateTime()}class Product {<<abstract>>- name: String- price: Double- stock: Integer+ calculateFinalPrice()}%% 用户class User {- username: String- phone: String+ login()+ addAddress()}class Address {- province: String- city: String- detail: String+ getFullAddress()}%% 商品class PhysicalProduct {- weight: DoublecalculateFinalPrice()}class DigitalProduct {- downloadUrl: StringcalculateFinalPrice()}%% 订单class Order {- orderNo: String- totalAmount: Double- status: OrderStatus+ addOrderItem()+ calculateTotalAmount()+ changeStatus()+ log()}class OrderItem {- product: Product- quantity: Integer+ getItemTotal()}%% 支付class PayRecord {- payNo: String- amount: Double- payType: PayType+ log()}class WechatPay {+ pay()+ refund()}class Alipay {+ pay()+ refund()}%% 物流class Logistics {- logisticsNo: String- company: String+ updateTrack()}class LogisticsTrack {- status: String- time: Date- location: String}%% 继承User --|> BaseEntityProduct --|> BaseEntityPhysicalProduct --|> ProductDigitalProduct --|> ProductOrder --|> BaseEntityPayRecord --|> BaseEntity%% 实现接口Order ..|> LoggablePayRecord ..|> LoggableWechatPay ..|> PayableAlipay ..|> Payable%% 组合(整体-部分,不可分离)Order --* OrderItemLogistics --* LogisticsTrackUser --* Address%% 聚合(整体-部分,可分离)User --o OrderOrder --o Logistics%% 关联OrderItem --> ProductPayRecord --> OrderPayRecord --> PayTypeOrder --> OrderStatus%% 依赖WechatPay ..> OrderAlipay ..> PayRecord

4、老版本语法

classDiagram新版本功能可以支持更丰富的内容,旧版写法差异明显,头部声明没有变化,不推荐使用就不介绍太多了。

classDiagramclass User {- name: String- age: int+ getName()}class Order {- orderId: String- price: double+ create()}User --> Order
classDiagramclass User {- name: String- age: int+ getName()}class Order {- orderId: String- price: double+ create()}User --> Order

5、新旧版本差异

新旧版本写法差异比较大,如下对比

对比项 旧版(Typora < 1.0,Mermaid < v9) 新版(Typora ≥ 1.0,Mermaid ≥ v9) 兼容性说明
头部声明 classDiagram classDiagram 完全兼容
接口定义 必须写:class 名称 <<interface>> 支持标准:interface 名称 旧版不识别 interface 关键字
抽象类 必须写:class 名称 <<abstract>> 支持标准:abstract class 名称 旧版不识别 abstract 关键字
枚举 不支持 <<enumeration>>,写了必崩 支持:class 名称 <<enumeration>> 旧版必须当成普通类画
方法签名 极严格:仅支持 方法名()带参数 / 返回值极易渲染失败 完整支持:+ 方法名(参数): 返回值 旧版复杂签名高概率不渲染
属性格式 简单 name: String 支持访问修饰符:- name: String 旧版可兼容,但布局不稳定
继承 `A -- > B` `A -- > B` 完全兼容
接口实现 `A .. > B` `A .. > B` 完全兼容
组合 A --* B A --* B 完全兼容
聚合 A --o B A --o B 完全兼容
关联 A --> B A --> B 完全兼容
依赖 A ..> B A ..> B 完全兼容
样式配置 不支持 %%{init: ...}%% 支持全局样式、颜色、字体 旧版会直接忽略 / 报错
布局稳定性 关系多易乱、交叉严重、自动排版差 自动布局更稳定,关系线更清晰 新版明显更优
  • 基础场景:语法规则差异明显
  • 高级场景:classDiagram新增专属功能
    • 支持 interface / abstract / <<enumeration>>
    • 支持完整方法签名(参数、返回值)
    • 支持样式配置 %%{init}%%
    • 类图布局更稳定

6、版本兼容性

  1. Typora 版本 < 1.0:基础支持不支持 interface /abstract 关键字、不支持枚举、复杂方法易崩

  2. Typora 版本 ≥ 1.0:完整支持interface、abstract、枚举、复杂方法签名、样式;

  3. 如何查版本:Typora → 帮助 → 关于 Typora(可看到 Typora 版本)。

http://www.jsqmd.com/news/360893/

相关文章:

  • 2026年广州种植牙医院推荐:数字化技术趋势排名,解决信息不对称与手术安全核心痛点 - 品牌推荐
  • Mac NTFS写入权限零成本解决方案:从诊断到精通的全流程指南
  • Numerical results of AaRMIL-dfp and aRMIL-dfp methods
  • 十四载技术沉淀 山东诺方打造颗粒监测一体化解决方案服务商 - 深度智识库
  • 三维混样仪与实验室混样仪哪种好用:厂家推荐类型+选购注意事项全解析 - 品牌推荐大师1
  • 京东E卡不止于购物,这些隐藏价值你未必知道 - 团团收购物卡回收
  • python家装项目管理系统-装修公司流程管理系统
  • 2026年全国售后完善的涉日纠纷争议解决律师 - 工业品网
  • 工业级粒子计数器怎么选?五大厂家全解析 - 深度智识库
  • 【日记】拖延症玩了一整天游戏(1308 字)
  • 京东E卡回收热潮背后,藏着怎样的市场逻辑与用户需求 - 团团收购物卡回收
  • 应用更新机制的设计与实践:从问题到价值的完整解决方案
  • 2026颗粒监测设备厂家权威推荐:山东诺方引领国产化精准监测新标杆 - 深度智识库
  • 告别重复操作,迎接高效游戏生活:游戏自动化效率工具全解析
  • 颠覆性3MF格式插件:无缝衔接Blender与3D打印全流程
  • 3大核心技术解锁网盘下载速度极限:零基础全平台配置指南
  • 2026年2月最新GEO公司实力榜单深度评测:从核心算法到ROI价值的六大主流厂商评价解析
  • 闲置京东E卡,别让“心意”沦为“浪费” - 团团收购物卡回收
  • GAN十年演进
  • 2026年劳保鞋工厂推荐:融合合规认证与成本效益分析的供应商综合评测 - 品牌推荐
  • GoRead v1.3.6:多端适配本地阅读工具
  • 无网区生命线:太阳能 LoRa Mesh 应急通信网络的设计与实现
  • 微流量注射泵选购指南:品牌、应用与选型建议 - 品牌推荐大师1
  • 3MF格式插件如何解决Blender用户的3D打印数据丢失难题
  • 2026年广州种植牙医院推荐:长期维护与性价比评测,涵盖初诊与复诊全场景关键痛点 - 品牌推荐
  • 语音合成十年演进
  • 3步拯救失效二维码:开源神器QRazyBox全攻略
  • 结构体与排序函数
  • 2026年正规的数字远程塔台系统,机场远程塔台系统,视频远程塔台系统公司采购决策指南 - 品牌鉴赏师
  • 智慧农业田间大豆毛豆黄豆豆荚检测数据集VOC+YOLO格式2688张1类别