生活场景
假设你要组装一台游戏电脑,包含:
CPU(Intel 或 AMD)
显卡(NVIDIA 或 AMD)
内存(16GB 或 32GB)
硬盘(SSD 或 HDD)
建造者模式的作用:将复杂对象的组装过程拆解成多个步骤,用不同的"装配工"(建造者)帮你组装不同配置的电脑,避免直接操作复杂的参数组合。
1.定义产品类
作用:
封装电脑的各个部件属性
提供显示配置的方法
class Computer {
private String cpu;
private String gpu;
private int ram;
private String storage;
// 通过构造函数设置属性(实际由建造者填充)
public Computer() {}
// Setter方法(建造者通过这些方法配置属性)
public void setCpu(String cpu) { this.cpu = cpu; }
public void setGpu(String gpu) { this.gpu = gpu; }
public void setRam(int ram) { this.ram = ram; }
public void setStorage(String storage) { this.storage = storage; }
// 显示配置信息
public void showSpecs() {
System.out.println("CPU: " + cpu);
System.out.println("GPU: " + gpu);
System.out.println("RAM: " + ram + "GB");
System.out.println("Storage: " + storage);
}
}
2.定义建造者接口(装配工的标准装配流程)
作用:
规定组装电脑的 步骤顺序
确保所有建造者都按相同流程工作
java
interface ComputerBuilder {
void buildCpu(); // 装CPU
void buildGpu(); // 装显卡
void buildRam(); // 装内存
void buildStorage(); // 装硬盘
Computer getResult(); // 交付电脑
}
3.具体建造者实现(不同配置方案)
作用:
实现不同的 配置方案(高端/经济型)
每个建造者按自己的方式实现各步骤
3.1.高性能配置者
java
class HighEndComputerBuilder implements ComputerBuilder {
private Computer computer = new Computer();
@Override
public void buildCpu() {
computer.setCpu("Intel i9-13900K"); // 高端CPU
}
@Override
public void buildGpu() {
computer.setGpu("NVIDIA RTX 4090"); // 旗舰显卡
}
@Override
public void buildRam() {
computer.setRam(32); // 大内存
}
@Override
public void buildStorage() {
computer.setStorage("2TB SSD"); // 高速硬盘
}
@Override
public Computer getResult() {
return computer;
}
}
3.2.经济性配置建造者
java
class BudgetComputerBuilder implements ComputerBuilder {
private Computer computer = new Computer();
@Override
public void buildCpu() {
computer.setCpu("AMD Ryzen 5"); // 中端CPU
}
@Override
public void buildGpu() {
computer.setGpu("AMD Radeon RX 7600"); // 性价比显卡
}
@Override
public void buildRam() {
computer.setRam(16); // 基础内存
}
@Override
public void buildStorage() {
computer.setStorage("512GB SSD + 1TB HDD"); // 混合存储
}
@Override
public Computer getResult() {
return computer;
}
}
4.指挥者类(组装具体配置)
作用:
控制 组装顺序(先装CPU,再装显卡等)
客户端只需和指挥者交互,无需了解建造细节
java
class Director {
private ComputerBuilder builder;
public Director(ComputerBuilder builder) {
this.builder = builder; // 绑定具体的建造者
}
// 定义组装流程
public Computer construct() {
builder.buildCpu();
builder.buildGpu();
builder.buildRam();
builder.buildStorage();
return builder.getResult();
}
}
5.客户端使用
关键逻辑:
用户只需选择建造者类型(HighEnd/Budget)
指挥者保证组装流程正确
最终得到不同配置但结构一致的电脑
java
public class Client {
public static void main(String[] args) {
// 方案一:组装高端电脑
ComputerBuilder highEndBuilder = new HighEndComputerBuilder();
Director director = new Director(highEndBuilder);
Computer gamingPC = director.construct();
gamingPC.showSpecs();
/* 输出:
CPU: Intel i9-13900K
GPU: NVIDIA RTX 4090
RAM: 32GB
Storage: 2TB SSD
*/
// 方案二:组装经济型电脑
ComputerBuilder budgetBuilder = new BudgetComputerBuilder();
director = new Director(budgetBuilder);
Computer officePC = director.construct();
officePC.showSpecs();
/* 输出:
CPU: AMD Ryzen 5
GPU: AMD Radeon RX 7600
RAM: 16GB
Storage: 512GB SSD + 1TB HDD
*/
}
}
总结

优点:
构造过程可控:分步骤构造复杂对象
配置灵活:通过不同建造者实现不同配置
隐藏细节:客户端不直接操作产品内部结构
扩展性示例(新增配置)
要新增一个「轻薄本配置」:
创建 UltrabookBuilder 实现 ComputerBuilder 接口
在建造方法中设置轻薄本专用配置(如低电压CPU、集成显卡)
客户端使用新建造者即可
原有代码无需修改,符合开闭原则(对扩展开放,对修改关闭)