建造者模式用于将一个复杂对象的构建过程与其表示分离,使得同样的构建过程可以创建不同的表示。
适用于创建过程复杂、构造顺序稳定但组件变化的对象。
public class Computer {
private String cpu;
private String ram;
private String storage;
public void setCpu(String cpu) { this.cpu = cpu; }
public void setRam(String ram) { this.ram = ram; }
public void setStorage(String storage) { this.storage = storage; }
@Override
public String toString() {
return "Computer [CPU=" + cpu + ", RAM=" + ram + ", Storage=" + storage + "]";
}
}
public interface Builder {
void buildCPU();
void buildRAM();
void buildStorage();
Computer getResult();
}
public class GamingComputerBuilder implements Builder {
private Computer computer = new Computer();
public void buildCPU() {
computer.setCpu("Intel i9");
}
public void buildRAM() {
computer.setRam("32GB DDR5");
}
public void buildStorage() {
computer.setStorage("1TB SSD");
}
public Computer getResult() {
return computer;
}
}
public class Director {
public void construct(Builder builder) {
builder.buildCPU();
builder.buildRAM();
builder.buildStorage();
}
}
public class Main {
public static void main(String[] args) {
Builder builder = new GamingComputerBuilder();
Director director = new Director();
director.construct(builder);
Computer computer = builder.getResult();
System.out.println(computer);
}
}
特点 | 建造者模式 | 工厂模式 |
---|---|---|
主要关注 | 构建过程 | 创建对象本身 |
复杂程度 | 更复杂(多个步骤) | 通常较简单 |
控制细节 | 客户端可自定义构建细节 | 客户端只能选择工厂返回对象 |
当一个产品的构建步骤稳定但各部分实现变化频繁时(如文档生成器、UI 构建器等),建造者模式非常适用。