欢迎光临
我们一直在努力

设计模式 vs UML

设计模式 vs UML

面向对象编程有两门"通用语言":设计模式教你怎么写代码,UML 教你怎么画代码。这篇文章帮你理清它们之间的对应关系。


一、先认识两位主角

在这里插入图片描述

设计模式:代码世界的"兵法三十六计"

前辈们发现,软件开发中很多问题反复出现,于是总结出 23 种经典解决方案,这就是设计模式。

它们按职责分成三大类:

类别核心问题一句话概括典型代表
创建型 对象怎么造? 把 new 这件事管起来 单例、工厂方法、抽象工厂、建造者、原型
结构型 类和对象怎么搭? 让不同零件能拼到一起 适配器、装饰器、代理、组合、外观、桥接、享元
行为型 对象之间怎么配合? 定义谁干什么、怎么通知 观察者、策略、命令、状态、模板方法、迭代器、责任链

记不住 23 种没关系,记住三句话就行:

创建型管"怎么造",结构型管"怎么搭",行为型管"怎么互动"。


UML:软件设计的"工程图纸"

UML(统一建模语言)用图形来描述软件系统,一共 13 种图,分两大类:

UML 13种图
|
+————-+————-+
| |
结构图 行为图
(画"长什么样") (画"怎么运转")
| |
类图 对象图 组件图 序列图 状态图 活动图
部署图 包图 复合结构图 用例图 通信图 时序图
交互概览图


二、核心对比:它们怎么对上?

设计模式的三类,正好能和 UML 的两大类图对应。关系是这样的:

设计模式 最适合的 UML 图
───────── ─────────────────

创建型 ──────────────► 类图(静态角色关系)
+ 序列图/活动图(创建流程)

结构型 ──────────────► 类图(继承、组合、依赖)
对象图(运行时结构)

行为型 ──────────────► 序列图(消息传递顺序)
状态图(状态切换)
活动图(业务流程)

下面展开说每种组合。


2.1 结构型模式 × 类图:天生一对

结构型模式的核心是类之间的静态关系——谁继承谁、谁包含谁、谁依赖谁。这正是类图要表达的东西。

举个例子,适配器模式用类图表达就是:

┌──────────┐ ┌──────────────┐
│ Client │────────>│ Target │ ◁── 目标接口
└──────────┘ └──────────────┘

│ 实现
┌──────────────┐ ┌──────────────┐
│ Adapter │────────>│ Adaptee │
└──────────────┘ └──────────────┘
适配器 被适配者

一句话:想知道一个结构型模式怎么设计的,先画类图。

装饰器、代理、组合、外观——这些模式的文档里,第一张图几乎永远是类图。


2.2 创建型模式 × 类图 + 序列图:动静结合

创建型模式有两层含义:

  • 静态层面:有哪些类参与(工厂类、产品类、客户端)→ 用类图
  • 动态层面:对象是怎么一步步创建出来的 → 用序列图或活动图

以工厂方法为例:

类图(静态):

┌──────────────┐
│ Creator │ ◁── 工厂接口
│ +factoryMethod()│
└──────────────┘


┌───────────┴───────────┐
│ │
┌──────────────┐ ┌──────────────┐
│ConcreteCreatorA│ │ConcreteCreatorB│
└──────────────┘ └──────────────┘
│ │
▼ ▼
┌──────────────┐ ┌──────────────┐
│ ProductA │ │ ProductB │
└──────────────┘ └──────────────┘

序列图(动态):

Client Creator Product
│ │ │
│ create() │ │
│───────────────>│ │
│ │ new() │
│ │───────────────>│
│ │ │
│ │<───────────────│
│<───────────────│ 返回产品对象 │
│ │ │

一句话:类图告诉你"谁参与",序列图告诉你"怎么做"。


2.3 行为型模式 × 序列图 + 状态图:动态为王

行为型模式的核心是对象之间的消息传递和状态流转,所以 UML 的"行为图"系列才是它们的主场。

行为型模式最适合的 UML 图为什么
观察者模式 序列图 展示 Subject 通知 Observer 的消息链路
策略模式 类图 + 序列图 类图展示策略接口,序列图展示运行时切换
命令模式 序列图 展示 Invoker → Command → Receiver 调用链
状态模式 状态图 本来就是为状态切换设计的,完美匹配
责任链模式 序列图 展示请求沿链条传递的过程

状态模式 × 状态图是最经典的搭配——状态图几乎就是状态模式的可视化翻译:

┌──────────┐ 投币 ┌──────────┐
│ NoCoin │───────>│ HasCoin │
└──────────┘ └──────────┘
△ │
│ 退币 │ 出货
└────────────────────┘

一句话:行为型模式如果不画序列图/状态图,等于只看了说明书没看操作视频。


三、重点来了:13 种图不用全学

UML 有 13 种图,但理解设计模式时,真正高频使用的只有 3 种:

优先级UML 图覆盖的模式为什么重要
★★★ 类图 全部 23 种 任何模式都有"哪些类、什么关系",类图是起点
★★★ 序列图 行为型 + 部分创建型 对象间的消息传递,运行时视角的核心
★★ 状态图 状态模式、策略模式 状态流转的直观表达,一图胜千言

其他图(活动图、通信图、组件图、部署图等)在特定场景有用,但不是理解设计模式的必修课。


四、一张总结表

维度设计模式UML
本质 解决特定问题的代码套路 描述系统结构的图形语言
数量 23 种模式 13 种图
分类 创建型 / 结构型 / 行为型 结构图 / 行为图
关系 用 UML 图来表达和沟通设计模式 设计模式是 UML 最常见的应用场景
入门门槛 需要理解面向对象三大特性 记住几种核心图即可上手

五、给初学者的建议

  • 先学类图,再学模式。 看不懂类图就去啃设计模式,就像看不懂乐谱去学弹琴——能弹,但效率低。

  • 每种模式至少画一张类图、一张序列图。 画完才算真懂,光看书上的图没用。

  • 不用追求 23 种全记住。 单例、工厂、策略、观察者、装饰器、适配器——这 6 种占了实际开发中 80% 的场景。

  • 结构型找类图,行为型找序列图。 这是最省力的学习路线。


  • 设计模式是"答案",UML 是"答题纸"。只有答案不行,只有答题纸也不行。两者配合,才是完整的软件设计表达能力。

    赞(0)
    未经允许不得转载:171主机测评 » 设计模式 vs UML
    分享到: 更多 (0)

    评论 抢沙发

    • 昵称 (必填)
    • 邮箱 (必填)
    • 网址