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

建造者模式(Builder)

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

http://www.xdnf.cn/news/15242.html

相关文章:

  • 【Datawhale AI 夏令营】 用AI做带货视频评论分析(二)
  • 微服务环境下的灰度发布与金丝雀发布实战经验分享
  • 【电脑】硬盘驱动器(HDD)的基础知识
  • 消息认证码(message authentication code)MAC
  • skywalking镜像应用springboot的例子
  • 【设计模式】单例模式 饿汉式单例与懒汉式单例
  • jenkins自动化部署前端vue+docker项目
  • 并发--Callable vs Runnable
  • 代码随想录算法训练营第三十二天|LeetCode 509 斐波那契数,LeetCode 70 爬楼梯,LeetCode 746 使用最小花费爬楼梯
  • 笔记-分布式计算基础
  • 云计算三大服务模式深度解析:IaaS、PaaS、SaaS
  • zynq-PS篇——bperez77中DMA驱动注意事项
  • 飞算 JavaAI 智能编程助手:颠覆编程旧模式,重构新生态
  • 深入解析Java的G1收集器:原理、实战与优缺点
  • Umi-OCR 的 Docker安装(win制作镜像,Linux(Ubuntu Server 22.04)离线部署)
  • 企业采购成本越来越贵?根源在哪,数据怎么分析?
  • 奇哥面试记:SpringBoot整合RabbitMQ与高级特性,一不小心吊打面试官
  • 供应链管理-计划:产能策略
  • Java 并发AQS为什么是双向链表
  • [面试] 手写题-选择排序
  • 学习C++、QT---20(C++的常用的4种信号与槽、自定义信号与槽的讲解)
  • JavaAI时代:重塑企业级智能开发新范式
  • 秋招小白学数据结构-1-数据结构前置知识
  • 面向构件的编程(COP)深度解析:构建模块化系统的工程范式
  • Linux_3:进程间通信
  • (六)复习(OutBox Message)
  • 游戏的程序员会不会偷偷改自己账号的数据?
  • C++迭代器失效
  • 数据结构 顺序表(3)---顺序表的应用
  • 计算机基础:内存模型