建造者模式(Builder Pattern)
定义
建造者模式是一种创建型设计模式,用于分步骤构造复杂对象。它通过将对象的构建过程与表示分离,使得同样的构建过程可以创建不同的对象形态。
UML 类图
- Director(指挥者):控制构建流程(定义步骤顺序),不依赖具体 Builder。
- Builder(抽象建造者):声明构建对象的步骤方法(如 buildPartA())。
- ConcreteBuilder(具体建造者):实现构建逻辑,生成具体产品。
- Product(最终构建的复杂对象):包含多个组成部分。
优点
- 分步构建:允许精细控制构造顺序,支持延迟构造或递归步骤(如先验证后初始化)。
- 灵活扩展:新增 ConcreteBuilder 即可支持不同对象配置,符合开闭原则。
- 封装性:隐藏复杂对象的内部结构,客户端无需了解构建细节。
- 单一职责:构造逻辑与业务逻辑分离,职责清晰。
缺点
- 代码冗余:需为每个产品编写独立的 Builder 类,增加代码量。
- 产品共性约束:所有产品必须遵循相同接口,否则需引入额外抽象层。
- 构造过程固化:若构建步骤频繁变化,需频繁修改 Builder 接口。
适用场景
- 复杂对象构造:对象包含多个组件(如汽车、计算机、配置文件)。
- 多种对象配置:需根据参数生成不同形态对象(如高配/低配电脑、XML/JSON 格式导出)。
- 分步初始化:对象构造需严格分步骤完成(如数据库连接池初始化)。
- 避免重叠构造器:替代含多个可选参数的冗长构造器(如 new Product(a, b, c, d…))。
常见的建造者模式源码案例
基础建造者模式
场景:分步骤构造一个计算机对象(CPU + 内存 + 硬盘)
扩展建造者模式(支持可选参数)
场景:构造用户对象,部分参数可选(如地址、电话)
线程安全建造者模式
场景:多线程环境下构造不可变对象
链式调用简化版(无 Director)
场景:快速构造订单对象(商品列表 + 收货地址)
结合 Lombok 的简化实现
建造者模式核心总结
实现方式 | 适用场景 | 关键特点 |
---|---|---|
基础建造者模式 | 严格分步骤构造复杂对象(如计算机组装) | 分离构建过程与表示,通过指挥者控制流程,支持多态化构建 |
扩展建造者模式 | 包含可选参数的对象构造(如用户信息) | 链式方法设置参数,支持必选/可选字段分离,可添加构建校验逻辑 |
线程安全建造者模式 | 多线程环境下的不可变对象(如配置类) | 使用synchronized 方法保证原子性,构造器私有化防止外部修改 |
链式调用简化版 | 快速构造简单对象(如订单) | 省略指挥者角色,直接通过Builder链式调用完成构建,适合轻量级场景 |
Lombok @Builder | 快速开发POJO/DTO类(如API响应对象) | 自动生成标准建造者代码,通过注解配置字段默认值,显著减少样板代码 |
场景选择建议
- 高复杂度对象 → 基础/扩展建造者模式
- 高频简单对象 → Lombok/链式简化版
- 多线程共享配置 → 线程安全建造者模式