java23种设计模式-建造者模式

建造者模式(Builder Pattern)学习笔记

1. 模式定义

建造者模式是一种创建型设计模式,通过分步构建复杂对象的方式,将对象的构建过程与表示分离。允许使用相同的构建过程创建不同的对象表示。

2. 适用场景

✅ 需要创建包含多个部件的复杂对象

✅ 需要控制对象的创建过程(分步骤构建)

✅ 需要构建不同表示的对象(相同构建过程不同实现)

✅ 希望避免构造器参数过多(解决"伸缩构造函数"问题)

3. 模式结构

Director -builder: Builder +construct() <<interface>> Builder +buildPartA() +buildPartB() +getResult() ConcreteBuilder -product: Product +buildPartA() +buildPartB() +getResult() Product +partA +partB +show()

4. 核心角色

角色 说明
Director 指挥者,控制构建过程(非必须)
Builder 抽象建造者,定义构建步骤的接口
ConcreteBuilder 具体建造者,实现构建步骤并返回产品
Product 最终构建的复杂对象

5. 代码示例

5.1 产品类

java 复制代码
public class Computer {
    private String cpu;
    private String ram;
    private String storage;
    
    // 构造函数、getters、toString...
}

5.2 抽象建造者

java 复制代码
public interface ComputerBuilder {
    void buildCPU();
    void buildRAM();
    void buildStorage();
    Computer getResult();
}

5.3 具体建造者

java 复制代码
public class GamingComputerBuilder implements ComputerBuilder {
    private Computer computer = new Computer();

    @Override
    public void buildCPU() {
        computer.setCpu("Intel i9-13900K");
    }

    @Override
    public void buildRAM() {
        computer.setRam("64GB DDR5");
    }

    @Override
    public void buildStorage() {
        computer.setStorage("2TB NVMe SSD");
    }

    @Override
    public Computer getResult() {
        return computer;
    }
}

5.4 指挥者(可选)

java 复制代码
public class Director {
    private ComputerBuilder builder;

    public Director(ComputerBuilder builder) {
        this.builder = builder;
    }

    public Computer construct() {
        builder.buildCPU();
        builder.buildRAM();
        builder.buildStorage();
        return builder.getResult();
    }
}

5.5 客户端调用

java 复制代码
public class Client {
    public static void main(String[] args) {
        ComputerBuilder builder = new GamingComputerBuilder();
        Director director = new Director(builder);
        Computer computer = director.construct();
        
        // 或直接使用建造者
        ComputerBuilder builder2 = new OfficeComputerBuilder();
        builder2.buildCPU();
        builder2.buildRAM();
        Computer simpleComputer = builder2.getResult();
    }
}

6. 模式变种

  1. 链式调用版
java 复制代码
public class Computer {
    // 使用静态内部类实现
    public static class Builder {
        private String cpu;
        private String ram;
        
        public Builder withCPU(String cpu) {
            this.cpu = cpu;
            return this;
        }
        
        public Builder withRAM(String ram) {
            this.ram = ram;
            return this;
        }
        
        public Computer build() {
            return new Computer(this);
        }
    }
}
// 使用:new Computer.Builder().withCPU("i7").withRAM("16GB").build();

7. 优缺点分析

✔️ 优点

  • 分离构建过程和表示
  • 更好的控制构建过程
  • 方便扩展新的产品类型
  • 避免过多构造函数参数

缺点

  • 增加代码复杂度
  • 产品需要高度相似才适用
  • 对简单对象的创建可能显得冗余

8. 相关模式对比

模式 关注点 复杂度 使用场景
工厂模式 对象整体创建 创建单一类型对象
抽象工厂模式 产品族的创建 创建相关对象家族
建造者模式 分步构建复杂对象 需要分步骤构建的复杂对象

9. 实际应用案例

  • Java中的StringBuilder
  • Spring中的BeanDefinitionBuilder
  • Lombok的@Builder注解实现
  • Android中的AlertDialog.Builder

10. 最佳实践建议

  1. 当构造器参数超过4个时考虑使用
  2. 需要创建不可变对象时优先使用
  3. 使用链式调用增强可读性
  4. 当构建顺序重要时一定要保留Director角色

📌 记忆技巧:把建造者模式想象成"分步填表"的过程,最后提交表格生成完整对象。

相关推荐
YGGP42 分钟前
【结构型模式】代理模式
设计模式
庄小焱6 小时前
设计模式——中介者设计模式(行为型)
设计模式
庄小焱8 小时前
设计模式——备忘录设计模式(行为型)
设计模式
庄小焱8 小时前
设计模式——代理设计模式(结构型)
设计模式
哆啦A梦的口袋呀9 小时前
基于Python学习《Head First设计模式》第三章 装饰者模式
python·学习·设计模式
哆啦A梦的口袋呀9 小时前
基于Python学习《Head First设计模式》第五章 单件模式
python·学习·设计模式
季鸢9 小时前
Java设计模式之备忘录模式详解
java·设计模式·备忘录模式
摘星编程13 小时前
工厂方法模式深度解析:从原理到应用实战
java·设计模式·软件工程·工厂方法模式
何中应14 小时前
【设计模式-4.7】行为型——备忘录模式
java·设计模式·备忘录模式
suixinger_lmh1 天前
功能结构整理
unity·设计模式·c#·源代码管理