企业网站管理系统如何使用说明深圳制作网站建设的企业
建造者模式(Builder Pattern)学习笔记
1. 模式定义
建造者模式是一种创建型设计模式,通过分步构建复杂对象的方式,将对象的构建过程与表示分离。允许使用相同的构建过程创建不同的对象表示。
2. 适用场景
✅ 需要创建包含多个部件的复杂对象
 ✅ 需要控制对象的创建过程(分步骤构建)
 ✅ 需要构建不同表示的对象(相同构建过程不同实现)
 ✅ 希望避免构造器参数过多(解决"伸缩构造函数"问题)
3. 模式结构
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. 模式变种
- 链式调用版:
 
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. 最佳实践建议
- 当构造器参数超过4个时考虑使用
 - 需要创建不可变对象时优先使用
 - 使用链式调用增强可读性
 - 当构建顺序重要时一定要保留Director角色
 
📌 记忆技巧:把建造者模式想象成"分步填表"的过程,最后提交表格生成完整对象。
