Builder模式概述
Builder模式是一种创建型设计模式,通过分步骤构建复杂对象而非一次性创建。它特别适用于需要创建包含多个可选参数的对象场景。
核心思想
- 将复杂对象的构建与表示分离
- 提供流畅的API接口
- 支持链式调用
- 确保对象创建的一致性和完整性
典型结构
1. 产品类(Product)
public class Computer {
private String cpu;
private String memory;
private String storage;
private String graphicsCard;
// 构造函数、getter和setter方法
}
2. 抽象建造者(Builder)
public abstract class ComputerBuilder {
protected Computer computer = new Computer();
public abstract void buildCpu();
public abstract void buildMemory();
public abstract void buildStorage();
public abstract void buildGraphicsCard();
public Computer getResult() {
return computer;
}
}
3. 具体建造者(ConcreteBuilder)
public class GamingComputerBuilder extends ComputerBuilder {
@Override
public void buildCpu() {
computer.setCpu("Intel i9-12900K");
}
@Override
public void buildMemory() {
computer.setMemory("32GB DDR5");
}
@Override
public void buildStorage() {
computer.setStorage("2TB NVMe SSD");
}
@Override
public void buildGraphicsCard() {
computer.setGraphicsCard("RTX 4090");
}
}
4. 指挥者(Director)
public class ComputerDirector {
private ComputerBuilder builder;
public void setBuilder(ComputerBuilder builder) {
this.builder = builder;
}
public Computer construct() {
builder.buildCpu();
builder.buildMemory();
builder.buildStorage();
builder.buildGraphicsCard();
return builder.getResult();
}
}
实现方式(链式调用)
现代Java中更常用的链式调用方式:
public class Computer {
private String cpu;
private String memory;
private String storage;
private String graphicsCard;
private Computer() {} // 私有构造函数
public static class Builder {
private Computer computer = new Computer();
public Builder cpu(String cpu) {
computer.cpu = cpu;
return this;
}
public Builder memory(String memory) {
computer.memory = memory;
return this;
}
public Builder storage(String storage) {
computer.storage = storage;
return this;
}
public Builder graphicsCard(String graphicsCard) {
computer.graphicsCard = graphicsCard;
return this;
}
public Computer build() {
// 验证逻辑
if (computer.cpu == null) {
throw new IllegalStateException("CPU is required");
}
return computer;
}
}
// getter方法
public String getCpu() { return cpu; }
public String getMemory() { return memory; }
public String getStorage() { return storage; }
public String getGraphicsCard() { return graphicsCard; }
}
使用示例
// 游戏电脑配置
Computer gamingComputer = new Computer.Builder()
.cpu("Intel i9-12900K")
.memory("32GB DDR5")
.storage("2TB NVMe SSD")
.graphicsCard("RTX 4090")
.build();
// 办公电脑配置
Computer officeComputer = new Computer.Builder()
.cpu("Intel i5-12400")
.memory("16GB DDR4")
.storage("512GB SSD")
.build();
Builder模式优势
- 参数可选性:只需设置必要参数
- 参数无序性:设置顺序灵活
- 对象不可变:创建后无法修改
- 代码可读性:逻辑清晰明了
- 类型安全性:编译时检查
- 验证机制:支持构建时参数验证
适用场景
- 创建包含多个可选参数的复杂对象
- 需要参数验证的对象构建
- 不可变对象的创建过程
- 各类配置对象的构造
- 需要提供流畅API接口的设计
与其他模式对比
- Factory模式:处理参数固定的对象创建
- Builder模式:处理复杂对象的逐步构建
- Prototype模式:处理对象复制
- Singleton模式:处理单例创建
Builder模式是Java开发中构建复杂对象的重要工具,特别适合创建包含多个可选参数的对象,是现代Java开发的核心设计模式之一。