设计模式 - 建造者模式 笔记

一、驱动力:

构建复杂对象(属性多、可选参数多)时,用构造函数构建会导致敲码 易出错、可读性不高、等。 由此引入建造者模式来改善问题。

建造者模式可看作 构造函数的 补充方案:

使用构造函数(new)构建对象是面对绝大多数对象的最基础、最通用的方案。一旦对象复杂了(参数多、可选、最好分步创建的),构造函数就不够用了,这时候建造者模式作为它的补充方案上场。

**归纳:**相比构造函数:

① 可读性更高

② 改进可选参数的配置不灵活问题

③ 拆分臃肿的构造函数为清晰的构建步骤


二、举例:

一个电脑对象,包含属性:(CPU、显卡、内存、硬盘、电源、显示器、键盘、鼠标、机箱、喇叭 ......)等等,很多属性(例如:喇叭、显示器等)可以不要。

  1. 如果使用构造函数:

    new Computer("i9", "3090", "16G", "1T", Null , "黑色", "500W" , Null ......);

会带来几个问题:

① 参数十几个,顺序不能错,传错一个出 bug。

② 读代码时,一眼看去,哪个是内存 、哪个是硬盘

③ 有的电脑不要喇叭、有的不要显示器。

是约定好让不要就传Null,还是说让一些参数默认 = null ,还是说重载多个构造函数?


  1. 建造者怎么解决?

引入一个电脑建造者(ComputerBuilder),指挥它干活(建造我想要的对象):

复制代码
Computer pc = new ComputerBuilder()
    .cpu("i9")
    .gpu("3090")
    .ram("16G")
    .build();

带来好处:

① 代码一眼清晰明了、不要的参数就不要,不用传null什么的

② 将原本堆积到构造函数中的所有逻辑代码拆分了一下,更简单、灵活,build() 时可统一校验一下传入的对象是否都合法兼容。


三、其他要点:

1、 建造者模式------天然适合 「固定步骤、顺序不能乱、分步组装」 的对象:

例如造房子的4 步:① 打地基 ② 砌墙 ③封顶 ④装修

(必须先打地基 → 再砌墙 → 再封顶 → 最后装修)这时候可以有一个指挥者来固定一套 "组装步骤顺序",让建造者照着顺序干活。

2、建造者模式------核心思想:将复杂对象的 构建过程 表示(最终成品)分离,用相同的构建步骤,生成不同的对象

如何理解?

拆开翻译:

1. 构建过程 = 制作步骤

比如造房子固定就这4 步

  1. 打地基
  2. 砌墙
  3. 封顶
  4. 装修

这就是构建过程 步骤永远不变。

2. 表示(最终成品)= 造出来的东西

例如:

  • 普通平房
  • 豪华别墅
  • 高楼大厦

这就是不同的成品( 同样 4 步,传入参数不同,可以造出不同的房子**)。**

3. 分离

意思就是: 步骤是步骤,房子是房子 我只管按固定 4 步盖 至于盖出来是平房还是别墅,互不干扰。

3、为什么不直接new出对象,并依次 属性赋值?

因为这样对象就是可变的了! new 出来后,你可以修改,别人也可以随便改(线程不安全、容易被篡改。)

当然如果是单线程的、可忽略安全性项目,也可以如此。

C# 有 new 对象(){属性A = xxx , 属性B = xxx,......} 这种写法。

相关推荐
cui17875687 小时前
矩阵拼团 + 复购拼团:新零售最稳的复购模式,规则简单
大数据·人工智能·设计模式·零售
百珏7 小时前
[灰度发布]:全链路透传组件:APM、自研方案与 Java Agent 的实现取舍
后端·设计模式·架构
穗余8 小时前
2026 AI x Web3 School共学营笔记-Day1
人工智能·笔记·web3
sheeta19988 小时前
LeetCode 每日一题笔记 日期:2026.05.20 题目:2657. 找到前缀公共数组
笔记·算法·leetcode
ABAP 成8 小时前
删除+新增原始BOM工序+订单BOM+工序笔记
笔记
XS0301068 小时前
MyBatis基础实战笔记一
笔记·mybatis
Oll Correct9 小时前
实验二十五:从IPv4向IPv6过渡所使用的隧道技术
网络·笔记
likerhood9 小时前
设计模式 · 享元模式(Flyweight Pattern)java
java·设计模式·享元模式
U盘失踪了10 小时前
【笔记】pycharm 安装Jupyter失败
笔记·python