建造者模式(Builder)

发布于:2025-07-16 ⋅ 阅读:(19) ⋅ 点赞:(0)

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 {
    @Override
    public void buildCpu() {
        computer.setCpu("Intel i9-12900K");
    }
    
    @Override
    public void buildMemory() {
        computer.setMemory("32GB DDR5");
    }
    
    @Override
    public void buildStorage() {
        computer.setStorage("2TB NVMe SSD");
    }
    
    @Override
    public 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博客


网站公告

今日签到

点亮在社区的每一天
去签到