当前位置: 首页 > 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问
  • 西湖大学本科新增临床医学专业,今年本科招生专业增至8个
  • 关税战推高成本,美澳“奥库斯”核潜艇协议或将生变
  • 五一出境游火爆:境外包车订单增长25%,日本酒店价格贵了好几倍
  • 韩国一战机飞行训练中掉落机炮吊舱和空油箱
  • 揭晓!人形机器人半马完赛奖+专项奖发布
  • 境外机构来华发行熊猫债累计超9500亿元