23种设计模式-创建型模式之建造者模式(Java版本)

Java 建造者模式(Builder Pattern)详解

🧱 什么是建造者模式?

建造者模式用于将一个复杂对象的构建过程与其表示分离,使得同样的构建过程可以创建不同的表示。

适用于创建过程复杂、构造顺序稳定但组件变化的对象。


🧠 使用场景

  • 对象的构建过程复杂,涉及多个步骤
  • 创建对象需要一步步构造,顺序不可乱
  • 希望构建过程与表示解耦

🏗️ 模式结构

  • Builder(抽象建造者)
  • ConcreteBuilder(具体建造者)
  • Product(产品角色)
  • Director(指挥者)

✅ 示例:建造一个电脑

产品类

java 复制代码
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 + "]";
    }
}

抽象建造者

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

具体建造者

java 复制代码
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)

java 复制代码
public class Director {
    public void construct(Builder builder) {
        builder.buildCPU();
        builder.buildRAM();
        builder.buildStorage();
    }
}

客户端使用

java 复制代码
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 构建器等),建造者模式非常适用。

相关推荐
文丑颜不良啊43 分钟前
LeetCode2481~2500题目解析
java·leetcode
Flynn Liang2 小时前
同一需求三套写法:用 Spring AI、LangChain4j、AgentScope Java 各实现一个带工具调用的 RAG 助手(实战对比)
java·人工智能·大模型·架构设计·spring ai·langchain4j·agentscope
聪明的笨猪猪2 小时前
实际工程问题:AI 生成 Spring Cache(@Cacheable / @CachePut / @CacheEvict)缓存注解踩坑
java·经验分享·面试·ai编程
愿有所息3 小时前
记一次 ARM64 + JDK8 上 fastjson2 的诡异数据错乱
java
秋饼3 小时前
MCP 2026-07-28 无状态协议大改版:Spring AI 2.1 多轮往返请求与网关路由落地
java·ai·技术分享·后端开发
SL_staff4 小时前
JVS-BI 实战:业务人员如何用零代码 ELT + 可视化配置构建实时经营分析闭环
java·spring·全栈
SL_staff5 小时前
企业AI落地难?JVS-AI渐进式实践:安全可控、小切口验证、标准化沉淀与规模化复制
java·开源·aigc
David猪大卫5 小时前
【C++修炼】map 和 set 的使用
c语言·开发语言·数据结构·c++·经验分享·笔记·学习
SL_staff6 小时前
JVS数字底座实践:构建企业级统一内容管理平台的技术路径
java·产品
nice_lcj5206 小时前
【从零理解 Spring AI · 12】MCP 的两种角色:做客户端还是做服务端
java·后端·spring·spring ai·ai应用开发