Java 建造者模式(Builder Pattern)详解
🧱 什么是建造者模式?
建造者模式用于将一个复杂对象的构建过程与其表示分离,使得同样的构建过程可以创建不同的表示。
适用于创建过程复杂、构造顺序稳定但组件变化的对象。
🧠 使用场景
- 对象的构建过程复杂,涉及多个步骤
- 创建对象需要一步步构造,顺序不可乱
- 希望构建过程与表示解耦
🏗️ 模式结构
- Builder(抽象建造者)
- ConcreteBuilder(具体建造者)
- Product(产品角色)
- Director(指挥者)
✅ 示例:建造一个电脑
产品类
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; }@Overridepublic 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;}
}
指挥者(Director)
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 构建器等),建造者模式非常适用。