建造者模式(Builder)
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 {@Overridepublic void buildCpu() {computer.setCpu("Intel i9-12900K");}@Overridepublic void buildMemory() {computer.setMemory("32GB DDR5");}@Overridepublic void buildStorage() {computer.setStorage("2TB NVMe SSD");}@Overridepublic 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开发的核心设计模式之一。
下一篇:装饰器模式和建造者模式的使用场景和区别-CSDN博客