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

设计模式详解:建造者模式

一、概述建造者模式是一种创建型设计模式它允许你分步骤地构建一个复杂的对象而无需暴露其内部表示。换句话说它把“构造”和“表示”分离使得同样的构建过程可以创建出不同的对象。举个生活中的例子 想象一下你在组装一台电脑你需要选择 CPU安装内存条加上硬盘装上显卡最后装进机箱这个过程是分步骤进行的而且每一步都可以有不同的选择比如选i5还是i7的CPU。建造者模式就是用来优雅地处理这种“分步构建复杂对象”的场景。为什么需要建造者模式假设我们有一个Computer类它有很多可选属性public class Computer { private String cpu; // 中央处理器如 Intel i7, AMD Ryzen 5 private String memory; // 内存大小如 16GB, 32GB DDR4 private String storage; // 存储设备如 512GB SSD, 2TB HDD private String gpu; // 图形处理器显卡如 RTX 4060, 集成显卡 private String powerSupply; // 电源如 650W 80 Bronze private String caseType; // 机箱类型如 ATX Mid Tower, Mini ITX }如果直接用构造函数或 setter 来创建对象代码会变得很乱这虽然能工作但不够优雅尤其是当对象构建逻辑复杂时。建造者模式可以让我们写出像这样流畅的代码Computer myPc new ComputerBuilder() .cpu(Intel i7) .memory(32GB) .storage(1TB SSD) .gpu(RTX 4080) .powerSupply(750W) .caseType(Mid Tower) .build();是不是看起来清爽多了这就是建造者模式的魅力建造者模式的四个角色Builder抽象建造者定义所有构建步骤的接口。ConcreteBuilder具体建造者实现 Builder 接口具体实现每一步的构建逻辑。Director指挥者调用建造者对象的方法来分步构建产品可选角色。Product产品最终要构建的复杂对象。⚠️ 注意在实际开发中Director并不总是必要的。很多时候我们会使用“流畅接口Fluent Interface”也就是链式调用直接在 Builder 中完成构建。二、Java 实战2.1、用建造者模式组装电脑电脑产品类/** * 电脑产品 * * author LS * version 1.0 * createDate 2025/8/31 17:15 **/ public class Computer { private String cpu;//中央处理器 private String memory;//内存大小 private String storage;//存储设备 private String gpu;//图形处理器 private String powerSupply;//电源 private String caseType;//机箱类型 // 私有化构造方法 只能由Builder 创建产品 private Computer(Builder builder) { this.cpu builder.cpu; this.memory builder.memory; this.storage builder.storage; this.gpu builder.gpu; this.powerSupply builder.powerSupply; this.caseType builder.caseType; } Override public String toString() { return Computer{ cpu cpu \ , memory memory \ , storage storage \ , gpu gpu \ , powerSupply powerSupply \ , caseType caseType \ }; } // getter方法 setter方法省略 public String getCpu() { return cpu; } public String getMemory() { return memory; } public String getStorage() { return storage; } public String getGpu() { return gpu; } public String getPowerSupply() { return powerSupply; } public String getCaseType() { return caseType; } // 静态内部类 Builder public static class Builder{ private String cpu; private String memory; private String storage; private String gpu; private String powerSupply; private String caseType; public Builder cpu(String cpu) { this.cpu cpu; return this; // 返回 this 实现链式调用 } public Builder memory(String memory) { this.memory memory; return this; // 返回 this 实现链式调用 } public Builder storage(String storage) { this.storage storage; return this; // 返回 this 实现链式调用 } public Builder gpu(String gpu) { this.gpu gpu; return this; // 返回 this 实现链式调用 } public Builder powerSupply(String powerSupply) { this.powerSupply powerSupply; return this; // 返回 this 实现链式调用 } public Builder caseType(String caseType) { this.caseType caseType; return this; // 返回 this 实现链式调用 } // build 创建电脑 public Computer build(){ return new Computer(this); } } // 关键提供一个静态方法返回 Builder 实例 public static Builder builder() { return new Builder(); } }测试类/** * 创建电脑测试类 * * author LS * version 1.0 * createDate 2025/8/31 17:28 **/ public class Test { public static void main(String[] args) { // 组装一台游戏电脑 Computer gamingPc Computer.builder() .cpu(Intel i9-13900K) .memory(64GB DDR5) .storage(2TB NVMe SSD) .gpu(RTX 4090) .powerSupply(1000W 80 Platinum) .caseType(Full Tower with RGB) .build(); System.out.println(gamingPc); } }测试结果2.2、BuilderBuilder是 Lombok 提供的一个注解它可以自动为类生成建造者模式所需的全部代码包括一个静态内部类Builder每个字段的xxx()设置方法支持链式调用一个build()方法来创建对象全参数构造函数可选有了它你不需要手动写一堆 Builder 代码只需要加一个注解就能实现.builder().field1(...).field2(...).build()的优雅语法。如何使用Builder第一步引入 LombokMaven 示例dependency groupIdorg.projectlombok/groupId artifactIdlombok/artifactId version1.18.30/version /dependency第二步使用Builder注解/** * 电脑产品 * * author LS * version 1.0 * createDate 2025/8/31 17:15 **/ Builder Getter public class Computer1 { private String cpu;//中央处理器 private String memory;//内存大小 private String storage;//存储设备 private String gpu;//图形处理器 private String powerSupply;//电源 private String caseType;//机箱类型 }就这么简单不需要写任何 Builder 相关的代码/** * 创建电脑测试类 * * author LS * version 1.0 * createDate 2025/8/31 17:28 **/ public class Test { public static void main(String[] args) { // 组装一台游戏电脑 Computer1 gamingPc Computer1.builder() .cpu(Intel i9-13900K) .memory(64GB DDR5) .storage(2TB NVMe SSD) .gpu(RTX 4090) .powerSupply(1000W 80 Platinum) .caseType(Full Tower with RGB) .build(); System.out.println(gamingPc); } }三、小结建造者模式就像是一个“装配流水线”把复杂的构建过程拆解成一个个小步骤最后组装成完整的产品。它让我们的代码更清晰、更易维护特别适合用于构建配置繁多的对象。

相关文章:

设计模式详解:建造者模式

一、概述建造者模式是一种创建型设计模式,它允许你分步骤地构建一个复杂的对象,而无需暴露其内部表示。换句话说,它把“构造”和“表示”分离,使得同样的构建过程可以创建出不同的对象。举个生活中的例子 🧩想象一下你…...

终极lolcat管道教程:10个技巧打造炫酷彩虹终端

终极lolcat管道教程:10个技巧打造炫酷彩虹终端 【免费下载链接】lolcat Rainbows and unicorns! 项目地址: https://gitcode.com/gh_mirrors/lo/lolcat lolcat是一款能让终端输出内容变成彩虹色的有趣工具,它可以将普通的文本内容转换为色彩斑斓的…...

如何快速成为开源社区贡献者:Awesome-Selfhosted入门完全指南

如何快速成为开源社区贡献者:Awesome-Selfhosted入门完全指南 【免费下载链接】awesome-selfhosted A list of Free Software network services and web applications which can be hosted on your own servers 项目地址: https://gitcode.com/GitHub_Trending/aw…...

终极Docker镜像安全指南:如何用Dive揪出CVE漏洞隐患

终极Docker镜像安全指南:如何用Dive揪出CVE漏洞隐患 【免费下载链接】dive A tool for exploring each layer in a docker image 项目地址: https://gitcode.com/GitHub_Trending/di/dive Dive是一款强大的Docker镜像探索工具,能够帮助开发者深入…...

腾讯混元 Hy3 preview 开源上线 AtomGit AI 社区,Agent 能力大幅提升

4 月 23 日,腾讯混元 Hy3 preview 语言模型开源并上线 AtomGit Ai。这是一个快慢思考融合的混合专家模型,总参数 295B,激活参数 21B,最大支持 256K 上下文长度。这是混元重建后训练的第一个模型,也是混元迄今最智能的模…...

STM32F103C6T6 PWM+DMA驱动WS2812B全彩LED:固件库实战避坑指南

STM32F103C6T6 PWMDMA驱动WS2812B全彩LED:固件库实战避坑指南 在智能家居和氛围照明项目中,WS2812B全彩LED因其集成驱动芯片和单线控制特性广受欢迎。然而,许多开发者在使用STM32驱动这类LED时,常被其严格的时序要求所困扰。本文将…...

终极Docker镜像优化指南:如何用Dive解决权限难题并提升存储效率

终极Docker镜像优化指南:如何用Dive解决权限难题并提升存储效率 【免费下载链接】dive A tool for exploring each layer in a docker image 项目地址: https://gitcode.com/GitHub_Trending/di/dive Docker镜像优化是每个开发者必须掌握的技能,而…...

终极指南:3个真实场景揭秘AutoGPT如何让AI应用开发效率提升10倍

终极指南:3个真实场景揭秘AutoGPT如何让AI应用开发效率提升10倍 【免费下载链接】AutoGPT AutoGPT is the vision of accessible AI for everyone, to use and to build on. Our mission is to provide the tools, so that you can focus on what matters. 项目地…...

Ofd2Pdf终极指南:5分钟掌握OFD转PDF的3种高效方法

Ofd2Pdf终极指南:5分钟掌握OFD转PDF的3种高效方法 【免费下载链接】Ofd2Pdf Convert OFD files to PDF files. 项目地址: https://gitcode.com/gh_mirrors/ofd/Ofd2Pdf 在数字办公时代,OFD作为中国自主的电子文档格式标准,在政务、金融…...

解放双手!B站视频一键转文字:bili2text让知识获取效率提升300%

解放双手!B站视频一键转文字:bili2text让知识获取效率提升300% 【免费下载链接】bili2text Bilibili视频转文字,一步到位,输入链接即可使用 项目地址: https://gitcode.com/gh_mirrors/bi/bili2text 还在为整理B站学习视频…...

手把手教你用分光光度法测植物叶片SOD/POD/CAT活性(附数据处理与避坑指南)

手把手教你用分光光度法测植物叶片SOD/POD/CAT活性(附数据处理与避坑指南) 实验室里那盆萎蔫的拟南芥,让我第一次意识到抗氧化酶测定的重要性。去年夏天,当我发现对照组和处理组的SOD活性数据出现反常交叉时,整整两周的…...

DeepL Chrome扩展:3步打造你的零配置AI翻译助手

DeepL Chrome扩展:3步打造你的零配置AI翻译助手 【免费下载链接】deepl-chrome-extension A DeepL Translator Chrome extension 项目地址: https://gitcode.com/gh_mirrors/de/deepl-chrome-extension 在全球化信息时代,语言障碍是获取知识、沟通…...

告别命令行!3分钟上手spotDL Web UI,轻松下载Spotify音乐

告别命令行!3分钟上手spotDL Web UI,轻松下载Spotify音乐 【免费下载链接】spotify-downloader Download your Spotify playlists and songs along with album art and metadata (from YouTube if a match is found). 项目地址: https://gitcode.com/G…...

告别状态管理混乱:Svelte 5条件绑定与响应式状态实战指南

告别状态管理混乱:Svelte 5条件绑定与响应式状态实战指南 【免费下载链接】svelte web development for the rest of us 项目地址: https://gitcode.com/GitHub_Trending/sv/svelte Svelte 5作为一款革新性的前端框架,以其独特的编译时响应式系统…...

告别卡顿:Svelte 5中$derived与Map类型Store的终极响应式优化指南

告别卡顿:Svelte 5中$derived与Map类型Store的终极响应式优化指南 【免费下载链接】svelte web development for the rest of us 项目地址: https://gitcode.com/GitHub_Trending/sv/svelte Svelte 5作为一款革新性的前端框架,通过其独特的编译时…...

72小时响应!Xiaomi Home Integration安全问题处理全流程优化指南

72小时响应!Xiaomi Home Integration安全问题处理全流程优化指南 【免费下载链接】ha_xiaomi_home Xiaomi Home Integration for Home Assistant 项目地址: https://gitcode.com/GitHub_Trending/ha/ha_xiaomi_home Xiaomi Home Integration是一款为Home Ass…...

Nightingale 夜莺监控系统 - 自愈实战:从告警触发到服务重启的自动化闭环

1. 夜莺监控系统自愈功能的核心价值 第一次接触夜莺(Nightingale)的自愈功能时,我正被半夜的告警电话折磨得苦不堪言。那会儿我们的电商系统频繁出现Nginx服务崩溃的情况,每次都需要人工登录服务器手动重启。直到发现夜莺的Ibex模…...

别再死记硬背Inception了!从VGG到Xception,一文搞懂深度可分离卷积的‘解耦’思想

从VGG到Xception:深度可分离卷积如何重塑现代CNN设计哲学 当你在GitHub上搜索"CNN实现"时,超过70%的代码仍在使用传统卷积操作。但有趣的是,这些项目中90%的性能瓶颈恰恰来自这些"全连接"式的卷积计算。2017年CVPR会议上…...

Remix项目中CSS导入导致页面刷新的3种终极解决方案

Remix项目中CSS导入导致页面刷新的3种终极解决方案 【免费下载链接】remix Build Better Websites. Create modern, resilient user experiences with web fundamentals. 项目地址: https://gitcode.com/GitHub_Trending/re/remix 在Remix项目开发过程中,CSS…...

Windows 11下用NoneBot2 + go-cqhttp rc5搭建QQ机器人,保姆级避坑指南(附最新扫码登录解决方案)

Windows 11下搭建QQ机器人的全流程避坑指南 最近在Windows 11上折腾QQ机器人时,发现不少朋友卡在了各种配置环节。特别是QQ协议更新后,传统的扫码登录方式频频报错,让不少开发者头疼不已。本文将基于NoneBot2框架和go-cqhttp rc5版本&#xf…...

从‘小白’到‘专家’:手把手教你搭建符合ISO 19011的审核员能力评价与持续发展体系

构建卓越审核团队:ISO 19011标准下的能力评价与发展体系实战指南 在当今快速变化的商业环境中,组织对管理体系有效性的需求比以往任何时候都更为迫切。作为确保管理体系持续改进的关键环节,内部审核的质量直接影响着组织的运营效率和风险控制…...

终极光线追踪阴影优化:Genesis如何突破机器人仿真光影瓶颈的完整指南

终极光线追踪阴影优化:Genesis如何突破机器人仿真光影瓶颈的完整指南 【免费下载链接】Genesis A generative world for general-purpose robotics & embodied AI learning. 项目地址: https://gitcode.com/GitHub_Trending/genesi/Genesis Genesis作为面…...

深入ArcGIS数据存储:从Shapefile到GDB,OBJECTID/FID/OID的设计逻辑与日常管理技巧

深入解析ArcGIS数据存储:OBJECTID、FID与OID的设计哲学与实战管理 在GIS数据管理的日常工作中,我们经常需要处理不同格式的空间数据文件。Shapefile、File Geodatabase和dBase表作为ArcGIS生态中最常见的三种数据存储格式,各自采用了一套独特…...

2048.cpp图形渲染技术:从ASCII到现代终端UI设计

2048.cpp图形渲染技术:从ASCII到现代终端UI设计 【免费下载链接】2048.cpp 🎮 Fully featured terminal version of the game "2048" written in C 项目地址: https://gitcode.com/gh_mirrors/20/2048.cpp 2048.cpp是一款用C编写的全功…...

Focus编辑器完全入门指南:从安装到高效使用的10个关键步骤

Focus编辑器完全入门指南:从安装到高效使用的10个关键步骤 【免费下载链接】focus A simple and fast text editor 项目地址: https://gitcode.com/gh_mirrors/fo/focus Focus是一款以简洁高效为核心设计理念的文本编辑器,专为注重输入流畅性和界…...

超神编辑器Lapce:游戏开发效率提升300%的秘密武器

超神编辑器Lapce:游戏开发效率提升300%的秘密武器 【免费下载链接】lapce Lightning-fast and Powerful Code Editor written in Rust 项目地址: https://gitcode.com/GitHub_Trending/la/lapce Lapce是一款用Rust编写的闪电般快速且功能强大的代码编辑器&am…...

Kyoo扫描器工作原理:智能识别动漫名称与媒体文件

Kyoo扫描器工作原理:智能识别动漫名称与媒体文件 【免费下载链接】Kyoo A portable and vast media library solution. 项目地址: https://gitcode.com/gh_mirrors/ky/Kyoo Kyoo是一款功能强大的便携式媒体库解决方案,其核心组件之一——Kyoo扫描…...

Spek Fixtures详解:如何正确使用beforeEachTest和afterEachTest

Spek Fixtures详解:如何正确使用beforeEachTest和afterEachTest 【免费下载链接】spek A specification framework for Kotlin 项目地址: https://gitcode.com/gh_mirrors/spe/spek Spek是一款专为Kotlin设计的规范测试框架,它提供了强大的fixtur…...

OpenDrop:重新定义微观世界的开源数字微流控平台

OpenDrop:重新定义微观世界的开源数字微流控平台 【免费下载链接】OpenDrop Open Source Digital Microfluidics Bio Lab 项目地址: https://gitcode.com/gh_mirrors/ope/OpenDrop 在传统生物实验室中,操控微观世界的液滴需要昂贵的设备和专业的操…...

Omnipay未来蓝图:AI与区块链支付的终极融合指南

Omnipay未来蓝图:AI与区块链支付的终极融合指南 【免费下载链接】omnipay A framework agnostic, multi-gateway payment processing library for PHP 5.6 项目地址: https://gitcode.com/gh_mirrors/om/omnipay Omnipay是一款面向PHP开发者的支付处理库&…...