模式概述
构建器模式(Builder Pattern)属于创建型设计模式,核心思想是将一个复杂对象的构建过程与其表示方式分离。通过相同的构建过程可以创建不同的表示形式,特别适用于具有复杂内部结构的对象。
简单代码示例
示例
// 1. 产品类:计算机(包含多个组件)
class Computer {
private String cpu;
private String ram;
private String storage;
private String gpu;
public void setCpu(String cpu) { this.cpu = cpu; }
public void setRam(String ram) { this.ram = ram; }
public void setStorage(String storage) { this.storage = storage; }
public void setGpu(String gpu) { this.gpu = gpu; }
@Override
public String toString() {
return "Computer [CPU=" + cpu + ", RAM=" + ram +
", Storage=" + storage + ", GPU=" + gpu + "]";
}
}
// 2. 抽象构建器
interface ComputerBuilder {
void buildCPU();
void buildRAM();
void buildStorage();
void buildGPU();
Computer getResult();
}
// 3. 具体构建器:游戏电脑
class GamingComputerBuilder implements ComputerBuilder {
private Computer computer = new Computer();
public void buildCPU() { computer.setCpu("Intel i9-13900K"); }
public void buildRAM() { computer.setRam("32GB DDR5"); }
public void buildStorage() { computer.setStorage("2TB NVMe SSD"); }
public void buildGPU() { computer.setGpu("NVIDIA RTX 4090"); }
public Computer getResult() { return computer; }
}
// 3. 具体构建器:办公电脑
class OfficeComputerBuilder implements ComputerBuilder {
private Computer computer = new Computer();
public void buildCPU() { computer.setCpu("Intel i5-12400"); }
public void buildRAM() { computer.setRam("16GB DDR4"); }
public void buildStorage() { computer.setStorage("512GB SSD"); }
public void buildGPU() { computer.setGpu("Integrated Graphics"); }
public Computer getResult() { return computer; }
}
// 4. 指挥者
class ComputerDirector {
public Computer construct(ComputerBuilder builder) {
builder.buildCPU();
builder.buildRAM();
builder.buildStorage();
builder.buildGPU();
return builder.getResult();
}
}
// 客户端使用
public class BuilderDemo {
public static void main(String[] args) {
ComputerDirector director = new ComputerDirector();
// 构建游戏电脑
Computer gamingPC = director.construct(new GamingComputerBuilder());
System.out.println("Gaming PC: " + gamingPC);
// 构建办公电脑
Computer officePC = director.construct(new OfficeComputerBuilder());
System.out.println("Office PC: " + officePC);
}
}
输出结果
Gaming PC: Computer [CPU=Intel i9-13900K, RAM=32GB DDR5, Storage=2TB NVMe SSD, GPU=NVIDIA RTX 4090]
Office PC: Computer [CPU=Intel i5-12400, RAM=16GB DDR4, Storage=512GB SSD, GPU=Integrated Graphics]
技术细节
1.模式组成
组件 | 职责说明 |
---|---|
产品 | 最终构建的复杂对象 |
抽象构建器 | 声明产品各部分的创建接口 |
具体构建器 | 实现构建器接口,提供不同实现 |
指挥者 | 控制构建流程,与具体构建器解耦 |
2.优点与缺点
优点
- 构建与表示分离:将对象的构建过程封装在独立对象中
- 精细控制构建过程:分步创建对象,精确控制内部结构
- 扩展性强:新增具体构建器即可支持新对象表示
- 避免构造函数污染:解决构造函数参数过多问题
缺点
- 产品需具有共同点才能使用同一构建流程
- 增加系统复杂度和类的数量
- 对构建顺序有强依赖的产品实现难度较大
模式应用
Spring 框架中RestTemplateBuilder,用于构建复杂的 RestTemplate 实例,支持链式配置:
RestTemplate restTemplate = new RestTemplateBuilder()
.rootUri("https://api.example.com")
.setConnectTimeout(Duration.ofSeconds(5))
.setReadTimeout(Duration.ofSeconds(10))
.additionalInterceptors(new LoggingInterceptor())
.build();