当前位置: 首页 > news >正文

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

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

相关文章:

  • 极狐GitLab 外部授权控制机制是怎样的?
  • PHP腾讯云人脸核身获取NONCE ticket
  • pytorch基本操作2
  • 十、数据库day02--SQL语句01
  • Python Logger用法和说明
  • 【重学Android】1.关于@Composer注解的一点知识笔记
  • UI自动化测试介绍及入门
  • go 语言切片 深入理解实例
  • Python作业4 文本词云统计,生成词云
  • Android 音频架构全解析:从 AudioTrack 到 AudioFlinger
  • 支付APP如何做好网络安全防护?从技术到用户管理的全链路安全策略
  • Mac mini 安装mysql数据库以及出现的一些问题的解决方案
  • 趣味编程之操作系统趣谈
  • VR拍摄要点与技巧有哪些?有哪些最佳实践?
  • Java面试中问单例模式如何回答
  • 理解.NET Core中的配置Configuration
  • MySQL:Join连接的原理
  • vue3+vite 实现.env全局配置
  • 【jenkins】首次配置jenkins
  • Java Web 之 Servlet 100问
  • 巴菲特宣布将于年底退休,“接班人”什么来头?
  • 5月2日,全社会跨区域人员流动量完成29275.4万人次
  • 云南省政协原党组成员、秘书长车志敏接受审查调查
  • “名额5分钟抢完”,一场花费上万元:越野赛凭什么这么火?
  • 马上评|科学谋划“十五五”,坚定不移办好自己的事
  • 证监会副主席王建军被查