创建型模式对比
2026/9/12大约 3 分钟
创建型模式对比
学完各个创建型模式后,最容易出现的问题是"这几个模式看起来都能创建对象,到底该用哪个?"。本篇把最容易混淆的两组模式放在一起对比,帮助建立选择依据。
1. 工厂方法模式 VS 建造者模式
工厂方法模式注重的是整体对象的创建方式;而建造者模式注重的是部件构建的过程,意在通过一步一步地精确构造创建出一个复杂的对象。
我们举个简单例子来说明两者的差异:如要制造一个超人,如果使用工厂方法模式,直接产生出来的就是一个力大无穷、能够飞翔、内裤外穿的超人;而如果使用建造者模式,则需要组装手、头、脚、躯干等部分,然后再把内裤外穿,于是一个超人就诞生了。
| 对比项 | 工厂方法模式 | 建造者模式 |
|---|---|---|
| 关注点 | 一次性创建出完整对象 | 分步骤组装复杂对象 |
| 产出过程 | 一步到位 | 多步构建 + 装配 |
| 使用方需要知道什么 | 需要哪个具体工厂 | 构建流程由 Director 封装 |
2. 抽象工厂模式 VS 建造者模式
抽象工厂模式实现对产品家族的创建。一个产品家族是这样的一系列产品:具有不同分类维度的产品组合。采用抽象工厂模式则不需要关心构建过程,只关心什么产品由什么工厂生产即可。
建造者模式则是要求按照指定的蓝图建造产品,它的主要目的是通过组装零配件而产生一个新产品。
如果将抽象工厂模式看成汽车配件生产工厂,生产一个产品族的产品;那么建造者模式就是一个汽车组装工厂,通过对部件的组装可以返回一辆完整的汽车。
| 对比项 | 抽象工厂模式 | 建造者模式 |
|---|---|---|
| 解决的问题 | 一族配套产品的创建 | 复杂对象的分步组装 |
| 关注点 | 产品之间"成套"的约束 | 构建过程的步骤与顺序 |
| 形象比喻 | 配件生产工厂 | 整车组装工厂 |
3. 五种创建型模式总览
| 模式 | 核心意图 | 典型场景 |
|---|---|---|
| 单例模式 | 保证全局只有一个实例 | Runtime、配置管理器、连接池 |
| 工厂方法模式 | 一个工厂生产一种产品,扩展产品不改老代码 | JDBC 驱动、日志框架的工厂 |
| 抽象工厂模式 | 一个工厂生产一族配套产品 | 换肤、跨平台 UI 组件 |
| 原型模式 | 克隆已有对象,绕过复杂初始化 | 大量相似对象、对象快照 |
| 建造者模式 | 分步骤组装复杂对象 | 共享单车生产、多参数对象构建 |
4. 小结
- 工厂方法与建造者的区别在于"一步到位还是分步组装";抽象工厂与建造者的区别在于"造零件还是组装整车";
- 选择模式时先问自己:创建的逻辑复杂在选型(该造哪种)还是过程(怎么一步步造)?前者偏工厂族模式,后者偏建造者模式;
- 模式之间并不互斥,实际项目里经常组合使用:比如先用抽象工厂拿到一组部件,再用建造者把它们组装成完整产品。
