GoF设计模式——建造者模式
h5打开以查看为什么需要建造者模式?在GoF设计模式——抽象工厂模式中,抽象工厂解决了"一族产品要风格统一"的问题——一个工厂负责一整套产品,选了工厂就等于选了整套风格。但不管是工厂方法还是抽象工厂,都只管"产出什么",不管"怎么一步步造出来"。有些对象的构造过程很复杂——不是一句new就能搞定的:// 构造一台电脑:要装 CPU、内存、硬盘,顺序还有讲究 Computer computer = new Computer("Intel i9-13900K", "DDR5 64GB", "NVMe SSD 2TB"); // 问题1:参数多了根本分不清哪个是哪个 // 问题2:有些参数可选,构造函数需要大量重载 // 问题3:构造逻辑散在业务代码中,换个产品就要重写当对象构造变复杂时,直接用构造函数有三个痛点:参数爆炸:十几个参数的构造函数难以阅读,调用方容易传错位置参数可选:有些必填、有些选填,构造函数需要大量重载来覆盖各种组合构建逻辑分散:构造细节混在业务代码中,换种产品就得重写建造者模式把这些细节封装到 Builder 里,调用方不用管里面怎么造。概念建造者模式(Builder Pattern)是创建型设计模式,核心思想:将复杂对象的构建过程与表示分离,用相同的构建步骤创建不同的产品。建造者模式包含四个核心角色:Product(产品):要构建的复杂对象Builder(抽象建造者):定义构建步骤的接口,规定"必须做哪几步"ConcreteBuilder(具体建造者):实现每个步骤,每种产品变体一个Director(指导者):编排构建顺序,封装"先做什么、后做什么"分工逻辑:Builder 定步骤 → ConcreteBuilder 实现步骤 → Director 排顺序 → Product 出结果。要点:建造者模式解决的是构建过程与表示分离。Director 封装"怎么造"的算法,Builder 决定"造出来长什么样"。同一个 Director 搭配不同 Builder,构建算法不变,但产出不同产品。实现GoF 标准实现:四角色模式GoF 原版,包含完整 Director。适合构建算法固定、产品变体多的场景。// 产品 public class Product { private String partA; private String partB; public void setPartA(String partA) { this.partA = partA; } public void setPartB(String partB) { this.partB = partB; } @Override public String toString() { return "Product{partA='" + partA + "', partB='" + partB + "'}"; } } // 抽象建造者:定义构建步骤 public interface Builder { public void buildPartA(); public void buildPartB(); public Product getResult(); } // 具体建造者 1 public class ConcreteBuilder1 implements Builder { private Product product = new Product(); @Override public void buildPartA() { product.setPartA("PartA-Type1"); } @Override public void buildPartB() { product.setPartB("PartB-Type1"); } @Override public Product getResult() { return product; } } // 具体建造者 2 public class ConcreteBuilder2 implements Builder { private Product product = new Product(); @Override public void buildPartA() { product.setPartA("PartA-Type2"); } @Override public void buildPartB() { product.setPartB("PartB-Type2"); } @Override public Product getResult() { return product; } } // 指导者:封装构建算法(步骤顺序) public class Director { private Builder builder; public Director(Builder builder) { this.builder = builder; } public Product construct() { builder.buildPartA(); // 第一步 builder.buildPartB(); // 第二步 return builder.getResult(); } } // 客户端:同一个 Director,换 Builder 出不同产品 Builder builder1 = new ConcreteBuilder1(); Director director = new Director(builder1); Product product1 = director.construct(); Builder builder2 = new ConcreteBuilder2(); director = new Director(builder2); Product product2 = director.construct();核心价值:Director 封装了固定的构建流程,换一个 Builder 就能产出不同配置,构建算法完全不变。简化实现:链式调用(Fluent Builder)省略 Director,Builder 自身通过return this支持链式调用。这是实际开发中最常用的版本,适合构建过程简单的场景——不需要严格的步骤顺序,只是字段赋值。public class User { private final String name; // 必填 private final int age; // 必填 priva

相关新闻

2026 年 GEO 服务商怎么选:AI 搜索时代品牌可见性的实战判断框架

2026 年 GEO 服务商怎么选:AI 搜索时代品牌可见性的实战判断框架

2026 年,品牌被看见的方式正在变化。越来越多的用户不再只看传统搜索结果,而是直接在 DeepSeek、豆包、通义千问、文心一言、Kimi、ChatGPT、Perplexity、Gemini 等 AI 平台里提问、筛选和决策。对市场负责人来说,问题已经不是“要不要做内容…

2026/10/2 14:15:19 阅读更多 →
课堂互动PPT模板怎么选?主流三大平台客观测评对比

课堂互动PPT模板怎么选?主流三大平台客观测评对比

一、前言:为什么你的课堂PPT总是没互动、很枯燥 在日常教学、公开课、线上授课场景中,很多老师和备课者都会遇到一个共性问题:PPT排版工整、内容齐全,但课堂氛围沉闷,学生注意力不集中,课堂参与度极低。 核…

2026/10/5 10:09:46 阅读更多 →
2026 年 7 月,这 6 款大模型正在颠覆你的认知(附实测对比)

2026 年 7 月,这 6 款大模型正在颠覆你的认知(附实测对比)

昨天有个朋友问我:“现在大模型这么多,我到底该用哪个?GPT-5 是不是最强?国产模型能不能打?” 说实话,这个问题我每个月都会被问十几次。 2026 年的大模型市场,变化太快了。年初还是 GPT-4 一家…

2026/10/3 2:20:10 阅读更多 →

最新新闻

如何 3 分钟获取九大网盘直链:网盘直链下载助手完全指南

如何 3 分钟获取九大网盘直链:网盘直链下载助手完全指南

如何 3 分钟获取九大网盘直链:网盘直链下载助手完全指南 【免费下载链接】Online-disk-direct-link-download-assistant 一个基于 JavaScript 的网盘文件下载地址获取工具。基于【网盘直链下载助手】修改 ,支持 百度网盘 / 阿里云盘 / 中国移动云盘 / 天…

2026/10/5 10:09:46 阅读更多 →
深入 clox 内联缓存(Inline Caching):用调用点缓存终结重复的方法哈希查找

深入 clox 内联缓存(Inline Caching):用调用点缓存终结重复的方法哈希查找

编程语言解释器编译器语言运行时教程 【免费下载链接】craftinginterpreters Repository for the book "Crafting Interpreters" 项目地址: https://gitcode.com/gh_mirrors/cr/craftinginterpreters 点击查看 免费下载 导读 本文围绕《Crafting Interp…

2026/10/5 10:09:46 阅读更多 →
TinyGLTF 实战指南:在 Vulkan 工程中集成 Header-Only 的 C++ glTF 2.0 加载器与序列化器

TinyGLTF 实战指南:在 Vulkan 工程中集成 Header-Only 的 C++ glTF 2.0 加载器与序列化器

示例工程图形学 【免费下载链接】Vulkan C examples for the Vulkan graphics API 项目地址: https://gitcode.com/gh_mirrors/vu/Vulkan 点击查看 免费下载 本文以仓库内 external/tinygltf/README.md 为核心,结合该库在 Vulkan 示例工程中的真实集成代…

2026/10/5 10:09:46 阅读更多 →
yansongda/pay Airwallex 退款实战:从参数到源码的完整解析

yansongda/pay Airwallex 退款实战:从参数到源码的完整解析

金融科技后端 【免费下载链接】pay 可能是我用过的最优雅的 Alipay/WeChat/Douyin/Unipay/江苏银行 的支付 SDK 扩展包了 项目地址: https://gitcode.com/gh_mirrors/pa/pay 点击查看 免费下载 Airwallex 是国际知名的跨境支付服务商,其 Payment Intent…

2026/10/5 10:09:46 阅读更多 →
使用 AWS SDK for SAP ABAP 操作 AWS HealthLake:FHIR 数据存储与导入导出任务实战

使用 AWS SDK for SAP ABAP 操作 AWS HealthLake:FHIR 数据存储与导入导出任务实战

示例工程教程后端 【免费下载链接】aws-doc-sdk-examples Welcome to the AWS Code Examples Repository. This repo contains code examples used in the AWS documentation, AWS SDK Developer Guides, and more. For more information, see the Readme.md file below. 项目地…

2026/10/5 10:09:45 阅读更多 →
Wand-Enhancer 完整免费解锁 WeMod 专业版:5 分钟实操指南

Wand-Enhancer 完整免费解锁 WeMod 专业版:5 分钟实操指南

Wand-Enhancer 完整免费解锁 WeMod 专业版:5 分钟实操指南 【免费下载链接】Wand-Enhancer Advanced UX and interoperability extension for Wand (WeMod) app 项目地址: https://gitcode.com/GitHub_Trending/we/Wand-Enhancer WeMod 专业版可以免费解锁。…

2026/10/5 10:08:45 阅读更多 →

日新闻

马斯克杀回智能体战场,Grok 4.5万亿参数撑腰,Cursor接手数字白领项目:用TaoToken统一Key跑通多模型Agent工作流

马斯克杀回智能体战场,Grok 4.5万亿参数撑腰,Cursor接手数字白领项目:用TaoToken统一Key跑通多模型Agent工作流

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/5 0:00:22 阅读更多 →
AI编程工具插件机制详解:plugin.json配置与加载失败排查指南

AI编程工具插件机制详解:plugin.json配置与加载失败排查指南

1. 从“plugins”这个词说起:它到底在解决什么问题如果你最近在折腾 AI 编程工具,尤其是 Cursor、Codex CLI、Claude Code 这类带 CLI 的编辑器或命令行助手,那你大概率绕不开一个词——plugins。这个词本身不新鲜,从浏览器到 IDE…

2026/10/5 0:00:23 阅读更多 →
第26课:OpenClaw|日志审计与问题诊断:把日志链路改到 TaoToken 的排查清单

第26课:OpenClaw|日志审计与问题诊断:把日志链路改到 TaoToken 的排查清单

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/5 0:00:23 阅读更多 →

周新闻

KT148A语音芯片外挂8002D功放的工程实践指南

KT148A语音芯片外挂8002D功放的工程实践指南

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/5 5:06:42 阅读更多 →
LLC谐振变换器增益公式推导:从FHA等效到完整归一化表达式

LLC谐振变换器增益公式推导:从FHA等效到完整归一化表达式

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/5 1:10:22 阅读更多 →
ARM架构深度解析:从RISC设计理念到交叉编译实战

ARM架构深度解析:从RISC设计理念到交叉编译实战

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/5 3:06:17 阅读更多 →

月新闻

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

我发现了一个新思路:用 Remotion + Claude Code 像写代码一样自动化生成短视频

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/4 11:40:45 阅读更多 →
Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

Windows下 Codex 中 Chrome 和 Computer Use 插件不可用问题排查及解决参考方式:TaoToken 统一 Key 配置与验证

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/4 9:43:54 阅读更多 →
黑夜航拍船只数据集训练YOLOV5模型全流程解析

黑夜航拍船只数据集训练YOLOV5模型全流程解析

/* MD / 富文本中的 .toc(含博客园搬家等嵌套结构);.toc-box 在侧栏,不受影响 */#content_views .toc,/* 编辑器常在目录前后插入空 p(:empty 仍占 20px),一并去掉避免顶空隙 */#content_views.markdown_views > p:empty:has(+ .toc),#content_views.markdown_views …

2026/10/4 20:14:29 阅读更多 →