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

java23种设计模式-建造者模式

建造者模式(Builder Pattern)学习笔记

1. 模式定义

建造者模式是一种创建型设计模式,通过分步构建复杂对象的方式,将对象的构建过程与表示分离。允许使用相同的构建过程创建不同的对象表示。

2. 适用场景

✅ 需要创建包含多个部件的复杂对象

✅ 需要控制对象的创建过程(分步骤构建)

✅ 需要构建不同表示的对象(相同构建过程不同实现)

✅ 希望避免构造器参数过多(解决"伸缩构造函数"问题)

3. 模式结构

Director
-builder: Builder
+construct()
«interface»
Builder
+buildPartA()
+buildPartB()
+getResult()
ConcreteBuilder
-product: Product
+buildPartA()
+buildPartB()
+getResult()
Product
+partA
+partB
+show()

4. 核心角色

角色说明
Director指挥者,控制构建过程(非必须)
Builder抽象建造者,定义构建步骤的接口
ConcreteBuilder具体建造者,实现构建步骤并返回产品
Product最终构建的复杂对象

5. 代码示例

5.1 产品类

public class Computer {private String cpu;private String ram;private String storage;// 构造函数、getters、toString...
}

5.2 抽象建造者

public interface ComputerBuilder {void buildCPU();void buildRAM();void buildStorage();Computer getResult();
}

5.3 具体建造者

public class GamingComputerBuilder implements ComputerBuilder {private Computer computer = new Computer();@Overridepublic void buildCPU() {computer.setCpu("Intel i9-13900K");}@Overridepublic void buildRAM() {computer.setRam("64GB DDR5");}@Overridepublic void buildStorage() {computer.setStorage("2TB NVMe SSD");}@Overridepublic Computer getResult() {return computer;}
}

5.4 指挥者(可选)

public class Director {private ComputerBuilder builder;public Director(ComputerBuilder builder) {this.builder = builder;}public Computer construct() {builder.buildCPU();builder.buildRAM();builder.buildStorage();return builder.getResult();}
}

5.5 客户端调用

public class Client {public static void main(String[] args) {ComputerBuilder builder = new GamingComputerBuilder();Director director = new Director(builder);Computer computer = director.construct();// 或直接使用建造者ComputerBuilder builder2 = new OfficeComputerBuilder();builder2.buildCPU();builder2.buildRAM();Computer simpleComputer = builder2.getResult();}
}

6. 模式变种

  1. 链式调用版
public class Computer {// 使用静态内部类实现public static class Builder {private String cpu;private String ram;public Builder withCPU(String cpu) {this.cpu = cpu;return this;}public Builder withRAM(String ram) {this.ram = ram;return this;}public Computer build() {return new Computer(this);}}
}
// 使用:new Computer.Builder().withCPU("i7").withRAM("16GB").build();

7. 优缺点分析

✔️ 优点

  • 分离构建过程和表示
  • 更好的控制构建过程
  • 方便扩展新的产品类型
  • 避免过多构造函数参数

缺点

  • 增加代码复杂度
  • 产品需要高度相似才适用
  • 对简单对象的创建可能显得冗余

8. 相关模式对比

模式关注点复杂度使用场景
工厂模式对象整体创建创建单一类型对象
抽象工厂模式产品族的创建创建相关对象家族
建造者模式分步构建复杂对象需要分步骤构建的复杂对象

9. 实际应用案例

  • Java中的StringBuilder
  • Spring中的BeanDefinitionBuilder
  • Lombok的@Builder注解实现
  • Android中的AlertDialog.Builder

10. 最佳实践建议

  1. 当构造器参数超过4个时考虑使用
  2. 需要创建不可变对象时优先使用
  3. 使用链式调用增强可读性
  4. 当构建顺序重要时一定要保留Director角色

📌 记忆技巧:把建造者模式想象成"分步填表"的过程,最后提交表格生成完整对象。

http://www.lryc.cn/news/542564.html

相关文章:

  • JMeter 中实现 100 个用户在 3 秒内并发登录
  • SOME/IP-SD -- 协议英文原文讲解2
  • IntelliJ IDEA中Maven配置全指南
  • 第438场周赛:判断操作后字符串中的数字是否相等、提取至多 K 个元素的最大总和、判断操作后字符串中的数字是否相等 Ⅱ、正方形上的点之间的最大距离
  • 20-R 绘图 - 饼图
  • 【LLM】R1复现项目(SimpleRL、OpenR1、LogitRL、TinyZero)持续更新
  • Linux 内核网络设备驱动编程:私有协议支持
  • 20241130 RocketMQ本机安装与SpringBoot整合
  • FFmpeg进化论:从av_register_all手动注册到编译期自动加载的技术跃迁
  • Http升级为Https - 开发/测试服环境
  • C语言预编译
  • 算法刷题-字符串-151.反转单词
  • 单片机裸机编程:状态机与其他高效编程框架
  • 图表控件Aspose.Diagram入门教程:使用 Python 将 VSDX 转换为 PDF
  • DPVS-1:编译安装DPVS (ubuntu22.04)
  • 即将发布书籍 - Yocto项目实战教程:高效定制嵌入式Linux系统
  • Git 常用指令及其说明
  • nginx代理后502
  • 大模型WebUI:Gradio全解12——LangChain原理及其agent构建Gradio(1)
  • 【Unity】鱼群效果模拟
  • PHP入门基础学习五(函数1)
  • 微信小程序 - 页面跳转(wx.navigateTo、wx.redirectTo、wx.switchTab、wx.reLaunch)
  • Typora的Github主题美化
  • 2.3 变量
  • Docker:Docker从入门到精通(一)- Docker简介
  • 【复习】Redis
  • 在Spring Boot+Vue前后端分离的项目中使用JWT实现基本的权限校验
  • 蓝桥杯单片机组第十二届省赛第二批次
  • 伪404兼容huawei生效显示404
  • UIAutomation开发常用方法的参考文档