C++,设计模式,【建造者模式】

【Java设计模式】Java设计模式及实践:23种设计模式全面讲解 设计模式(Design Pattern)是前辈们对代码开发经验的总结,是解决特定问题的一系列套路。它不是语法规定,而是一套用来提高代码可复用性、可维护性、可读性、稳健性以及安全性的解决方案。 本文虽然命名为“Java设计模式”,但是设计模式并不是 Java这一编程语言的专利,它同样适用于 C++、C#、JavaScript 等其它面向对象的编程语言。 Java 是典型的面向对象的编程语言,所以本文以 Java 为基础来讲解这 23 种设计模式。目前在这里只是对Java设计模式以及用法的目录汇总,以后会详 阅读详情

在这里插入图片描述


通俗易懂的建造者模式:手把手教你造电脑

一、现实中的建造者困境

想象你开了一家电脑组装店,客户经常提出这样的需求:

"我要i7处理器+32G内存+RTX4090显卡的电竞主机"
"给我配个i5处理器+16G内存+核显的办公机"
"这个配置能不能换成1TB固态硬盘?"

直接在代码里写N个if-else会变成这样:

Computer buildComputer(string type) {
    Computer c;
    if (type == "gaming") {
        c.cpu = "i7";
        c.ram = "32G";
        //...其他20个部件配置
    } else if (type == "office") {
        //...重复代码
    }
    return c;
}

当需要新增配置项时,所有条件分支都要修改。这时候就需要【建造者模式】登场了!


二、建造者模式核心思想

将复杂对象的构建过程与它的表示分离,让同样的构建过程可以创建不同的表示。

🌰 举个栗子:
就像乐高积木,同样的基础零件(CPU/内存/硬盘),通过不同的搭建顺序(建造者),可以造出赛车(游戏电脑)或房屋(办公电脑)。


三、代码实战:组装电脑

1. 产品类 - 电脑

class Computer {
public:
    void setCPU(string cpu) { this->cpu = cpu; }
    void setRAM(string ram) { this->ram = ram; }
    void setGPU(string gpu) { this->gpu = gpu; }
    
    void showConfig() {
        cout << "【电脑配置】\n"
             << "CPU: "<< cpu << "\n"
             << "内存: "<< ram << "\n"
             << "显卡: "<< gpu << endl;
    }

private:
    string cpu = "i3";
    string ram = "8G";
    string gpu = "集成显卡";
};

2. 抽象建造者 - 装机师傅

class ComputerBuilder {
public:
    virtual ~ComputerBuilder() = default;
    virtual void buildCPU() = 0;
    virtual void buildRAM() = 0;
    virtual void buildGPU() = 0;
    virtual Computer* getComputer() = 0;
};

3. 具体建造者 - 电竞主机版

class GamingComputerBuilder : public ComputerBuilder {
    Computer* computer = new Computer();
    
public:
    void buildCPU() override { computer->setCPU("i7-13700K"); }
    void buildRAM() override { computer->setRAM("32G DDR5"); }
    void buildGPU() override { computer->setGPU("RTX 4090"); }
    
    Computer* getComputer() override { return computer; }
};

4. 具体建造者 - 办公主机版

class OfficeComputerBuilder : public ComputerBuilder {
    Computer* computer = new Computer();
    
public:
    void buildCPU() override { computer->setCPU("i5-12400"); }
    void buildRAM() override { computer->setRAM("16G DDR4"); }
    void buildGPU() override { /* 使用核显 */ }
    
    Computer* getComputer() override { return computer; }
};

5. 指挥官 - 装机总控

class Director {
    ComputerBuilder* builder;
    
public:
    void setBuilder(ComputerBuilder* b) { builder = b; }
    
    Computer* construct() {
        builder->buildCPU();
        builder->buildRAM();
        builder->buildGPU();
        return builder->getComputer();
    }
};

6. 客户端使用

int main() {
    Director director;
    
    // 组装电竞主机
    director.setBuilder(new GamingComputerBuilder());
    Computer* gamingPC = director.construct();
    gamingPC->showConfig();
    
    // 组装办公主机
    director.setBuilder(new OfficeComputerBuilder());
    Computer* officePC = director.construct();
    officePC->showConfig();
    
    return 0;
}

四、模式优势解析

1️⃣ 解耦复杂度:把20个配置项分散到不同建造者中
2️⃣ 开闭原则:新增配置项只需加建造者,不改现有代码
3️⃣ 去重复:组装流程统一在Director中管理
4️⃣ 可视化配置:客户端代码像搭积木一样清晰


五、适用场景速查表

场景适用建造者模式?
对象构造过程复杂✔️
需要不同表示的同类产品✔️
构造过程需要分步控制✔️
简单对象构造❌

六、模式全家福

Director
ComputerBuilder
GamingBuilder
OfficeBuilder
Computer

七、常见误区提醒

❌ 不要为了用模式而用模式(简单对象不需要)
❌ 当构造过程需要动态变化时,考虑使用工厂模式
✅ 当出现大量if-else构造代码时,就是建造者的信号


八、现实应用案例

  1. Java的StringBuilder
  2. SQL查询构建器(如Hibernate)
  3. LaTeX文档生成器
  4. 软件安装程序的配置向导

掌握建造者模式,就像拿到了对象构造的"乐高说明书"。下次面对复杂对象的组装需求,试着用这个模式解耦你的代码,让系统像模块化积木一样灵活可扩展!

阿里九宫格验证码 (Baxia SecCaptcha) 逆向工程与自动化求解 实现对阿里巴夏 (Baxia) 九宫格点击验证码的全自动求解模式说明依赖浏览器模式通过 Puppeteer/Playwright 控制真实浏览器,享有完整 DOM/Canvas/WASM 环境需要 Chrome/Chromium纯算模式脱离浏览器,通过 HTTP API + Node.js WASM 解密完成求解无需浏览器。 阅读详情

相关推荐

ANSYS Maxwell:创建即用型 3D 轴向磁通电机模型

Magnet Length” 是磁体的径向长度。“Magnet Thickness” 是磁体的轴向长度。为了对 AFM 进行更详细的分析,用户需要在 ANSYS Maxwell 中运行 3D FEA 分析。对于 2D 模型,它们类似于 MotorCAD 中的模型,后者对等效的直线电机进行建模。单击“确定”后,将创建一个 3D Maxwell 模型。“长度”是转子铁的轴向长度。然后需要定义定子的“磁芯”尺寸和材料。“长度”是定子铁芯的轴向长度。“转子”# 的极数必须与“定子”中定义的磁极相同。

jkh920184196的博客 1930

[设计模式、C++、go]创建型模式:建造者模式

文章目录建造者模式介绍类图:代码实现:C++测试优缺点使用场景 建造者模式 介绍 建造者模式(Builder Pattern)使用多个简单的对象一步一步构建成一个复杂的对象 定义: Separate the construction of a complex object from its representation sothat the same construction process can create different representations.(将一个复杂对象的构建与它的表示分离,使

这是书生呀 852

DEV-C++调试设置

       昨天用C/C++去考了CSP,结果用DEV-C++调试总是闪退,按照我的记忆打开了调试参数,迷迷糊糊搞了一通,还是没办法调试,难受了几个小时。所以今天痛下决心,一定要写下DEV-C++设置调试的过程,警示自己! 解决步骤 1.打开DevC++找到上方工具栏 2.点击选择编译选项,再按下图所示设置即可

懒羊羊的快乐小屋 1029

设计模式:建造者模式(C#、JAVA、JavaScript、C++、Python、Go、PHP)

建造者模式,它是一种对象构建模式,它提供了一种构建对象的最佳方式。这种模式适用于当对象的构建过程需要涉及到多个部分,并且这些部分在构造过程中可以逐步完善。 建造者模式将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。这种模式将对象的创建过程抽象化,通过将对象的创建与它的表示分离,使得同样的构建过程可以创建不同的表示。

web 334

Dynamics 365从入门到精通:一站式掌握微软智能商业应用平台

很多新手学Dynamics 365时,容易陷入“死记功能”的误区,其实这款平台的核心价值不是“功能多全”,而是“能适配企业业务流程,通过生态集成提升效率”。先从具体业务场景入手,理解每个功能的实际价值;再通过生态集成拓展系统能力;最后通过开发实现定制化,满足企业的特殊需求。按照这个思路,新手不用害怕复杂,一步步落地实战,3个月就能从“入门”到“能独立负责项目”。如果在学习过程中遇到具体问题(比如部署报错、数据迁移失败),欢迎在评论区留言,我会结合实战经验帮你解答!

这里只有干货:从 Modbus 通信到 MES 对接,从 YOLO 训练到工控机部署,带你搞定工业软件开发全流程。 1040

ENVI5.6 Seamless Mosaic多景影像镶嵌色差问题

多景影像无缝镶嵌色差问题拟解决方法

Matchaya的博客 7703

【设计模式】【创建型模式(Creational Patterns)】之建造者模式(Builder Pattern)

建造者模式是一种非常有用的创建型设计模式,尤其适用于构建复杂的对象。通过将对象的构建过程与其表示分离,建造者模式使得相同的构建过程可以创建不同的表示。封装性:将复杂的构建过程封装在建造者类中,客户端无需知道具体的构建细节。灵活性:可以通过不同的建造者类创建不同类型的产品对象,增加了系统的灵活性。可扩展性:增加新的建造者类时,无需修改现有代码,符合开闭原则。然而,建造者模式也有一些缺点,例如代码量会增加,且在简单对象的构建中可能显得过于复杂。因此,选择是否使用建造者模式应根据具体的需求和场景来决定。

ido1ok的博客 1076

abaqus运行报错 WindowsError:[Error 2]

abaqus提交job总是提示“WindowsError [Error 2”,报这个错误,可能是由于安装其他软件改变了abaqus软件的路径导致,总结了看到的教程,按照下面的方法可以解决这个问题。 步骤一:找到你的abaqus安装路径(我是按照一个安装视频安装的,安装路径为SIMULI1),然后找到SIMULIA文件夹,点击进入后找到commands文件夹,将这个路径复制下来。 步骤二:我的电脑右键属性,在左侧中找到高级系统设置并...

az101za的博客 1万+

C++,设计模式,【目录篇】

设计模式(Design Patterns)是软件工程中针对常见问题的可重用解决方案。它们不是具体的代码,而是经过验证的最佳实践,用于解决特定场景下的设计问题。设计模式最早由 Erich Gamma 等人在《设计模式:可复用面向对象软件的基础》一书中提出,共包含 23 种经典模式。

汽车电子软件领域知识分享 1303

Python爬虫实战:逆向解析天猫商品详情API,精准捕获规格、SKU与促销活动

及浏览器开发者工具),绕过前端渲染的复杂性,直接逆向分析并调用其内部数据接口,从而高效、稳定地抓取商品的关键信息,包括商品规格、多维度SKU信息以及复杂的促销活动。print(f"SKU ID: {sku.sku_id}, 价格: ¥{sku.price}, 库存: {sku.stock}, 规格: {sku.props}")当你访问一个商品链接时,浏览器首先会加载一个几乎为空的HTML骨架,然后通过执行大量的JavaScript代码,向后台服务器发起多个异步请求,最终将获取到的数据填充到页面中。

2201_76125261的博客 1129

设计模式-建造者模式

最近在很多场合都看见设计模式的影子,一直以来,都投入主要时间在搞算法与数据结构,很来发现设计模式真的很重要。有的时候代码的可维护、可重用、可扩展确实胜过单纯的算法效率高。所以拾起大牛书籍《大话设计模式》同时参考网上诸大牛的博客,开始我的设计模式之旅。由于平时编程时用C/C++,现在是Java,也练练Java语法。        今天先介绍一下建造者模式。 概念:             建造

晓风残月xj 995

YOLOv8n轻量化实战:10分钟打通实时摄像头目标检测,附参数调优与避坑指南

本文介绍了如何快速入门YOLOv8目标检测框架,通过摄像头实战实现实时检测。YOLOv8凭借轻量化架构和跨平台优势,是新手入门的理想选择。文章详细讲解了环境搭建(1分钟完成)、核心代码逻辑(3分钟掌握)以及性能调优技巧(3分钟进阶),提供可直接运行的代码示例。重点包括:模型选择(优先yolov8n.pt)、摄像头参数优化、置信度阈值调整、检测类别指定等实用技巧,帮助开发者快速实现10-15FPS的实时检测效果,并针对不同场景提供优化建议。

专注于Python爬虫开发,分享爬虫技巧、项目实战与反爬经验,使用Scrapy、BeautifulSoup等工具,解决数据抓取难题。 370

设计模式之开篇(c++)

随着面向对象技术的发展和广泛应用,设计模式不再是一个新兴的名词,它已逐步成为系统架构人员、设计人员、分析人员以及程序开发人员所需掌握的基本技能之一。设计模式已广泛应用于面向对象的设计和开发,成为面向对象领域的一个重要组成部分。——《设计模式》 前言: 开创这一系列的原因是因为《设计模式》(刘伟,清华大学出版社)中的实例是用java实现的,由于本弱钟爱c++,所以打算将java翻译为c++的...

Sincky的博客 601

Outlook Express 6 (OE6) for Win7/Win8/Win10

英文版 Outlook Express6.0, 兼容Win7/Win10/WinXP,解压就可用。

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

Linux C++ 062-设计模式之建造者模式

本节关键字:Linux、C++、设计模式、建造者模式 相关库函数:

Tianwx的博客 464

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

C语言-设计模式

设计模式的书相信很多人都看过。对于设计模式这样一种方法,相信不同的人有不同的理解。   C语言和设计模式(开篇) 关于软件设计方面的书很多,比如《重构》,比如《设计模式》。至于软件开发方式,那就更多了,什么极限编程、精益方法、敏捷方法。随着时间的推移,很多的方法又会被重新提出来。 其实,就我个人看来,不管什么方法都离不开人。一个人写不出二叉树,你怎么让他写?敏捷吗?你写一行

benpaobagzb的博客 668

C++项目实战——基于多设计模式下的同步&异步日志系统-③-前置知识补充-设计模式

C++项目实战——基于多设计模式下的同步&异步日志系统-③-前置知识补充-设计模式

花想云的博客 1832

C+设计模式(创建和结构型)—实践总结

一直想学习设计模式,也一直有大概了解,但是之前一直是理论,现在工作多了想仔细结合实践中的遇到的功能点分析下,所以有了这篇文章。

weixin_43676978的博客 548

学习设计模式(6)——建造者模式

1.介绍 这个模式,非常有用。 有时候,你的一个类,有许多函数功能,你又不希望在这个类里面再增加一个管理函数调用的接口,但你又不希望用全局变量来操作这批函数,怎么办? 你还可以用建造者模式。 2.具体使用说明 最经典的例子,莫过于《effective C++》条款23,宁以non-member,non-friend替换member函数。 我就是从这里学的建造者模式。虽然在Mey

奋斗,永不止步 318

C/C++设计模式(零) 设计模式分类和基本原则

设计模式前言 模式 在一定环境中解决某一问题的方案,包括三个基本元素:问题,解决方案和环境。 即在一定环境下,用固定套路解决问题。 设计模式(Design pattern) 是一套被反复使用、多数人知晓的、经过分类编目的、代码设计经验的总结。使用设计模式是为了可重用代码、让代码更容易被他人理解、保证代 码可靠性。 毫无疑问,设计模式于己于他人于系统都是多赢的;设计模式使代码编制真正工程化; 设计模式是软件工程的基石脉络,如同大厦的结构一样。 “我眼中的设计模式” 把简单的问题复杂化(标准..

码之有道 552

Java设计模式:23种设计模式全面解析(超级详细)

设计模式(Design Pattern)是前辈们对代码开发经验的总结,是解决特定问题的一系列套路。它不是语法规定,而是一套用来提高代码可复用性、可维护性、可读性、稳健性以及安全性的解决方案。 1995 年,GoF(Gang of Four,四人组/四人帮)合作出版了《设计模式:可复用面向对象软件的基础》一书,共收录了 23 种设计模式,从此树立了软件设计模式领域的里程碑,人称「GoF设计模式」。 ...

wenjianfeng的专栏 5970

最全23种设计模式详解(一)

一、UML 1.1 UML的定义 UML:统一建模语言(Unified Modeling Language,UML)是一种为面向对象系统的产品进行说明、可视化和编制文档的一种标准语言,是非专利的第三代建模和规约语言。UML是面向对象设计的建模工具,独立于任何具体程序设计语言。 1.2 UML的作用 (1)为软件系统建立可视化模型。 UML符号具有良好的语义,不会引起歧义;基于UML的可视化模型,使系统结构直观、易于理解;使用UML进行软件系统的模型不但有利于系统开发人员和系统用户的交流,还有利于.

且视他人之疑目如盏盏鬼火,大胆走吾之夜路! 3875

用 C 语言编写设计模式--单例模式 (log日志文件的实现)

单例模式是一种属于对象创建型的模式,即保证系统中类只生成一个对象。这个是一个十分常用的设计模式,比如系统中只初始化一次的资源,如 socket、log 日志文件等,能被多个线程访问,保证其有唯一 1 个实列存在,作为全局变量供其他地方访问,同时也避免重复资源被初始化操作带来错误。简而言之,就是对一个一次性资源的封装,避免被重复申请或初始化,然后作为一个全局变量被访问。单例模式有如下几个特点:1.确保该资源只被申请或初始化一次 2.定义静态对象指针 3.提供一个函数,全局访问👀。

weixin_46564301的博客 2324

设计模式实验考试

《软件体系结构》实验考试 注意:考试时间为100分钟,请认真作答。如给出的回答区域不够,可自行调整表格长度,务必保证美观大方。程序可以加入必要注释来解释说明内容。 问题描述: 快餐套餐一般含有主食、饮料、点心三部分组成,KFC快餐套餐与Mcdonald快餐套餐的生成过程大致都是一样的。每份套餐由主食、饮料、点心三部分组成,当每部分具体的食品可能不同,如主食可能是鸡肉卷、汉堡等,即对象的各组成部分可...

顾道长生的科研笔记 1037

C++,std::queue 详解

std::queue 是 C++ 标准模板库(STL)中的一个容器适配器,它提供了一种先进先出(FIFO)的数据结构。std::queue 通常被用于存储元素集合,并且只允许在尾部添加新元素(push),在头部移除元素(pop)。这种特性使得 std::queue 成为实现队列行为的理想选择。

汽车电子软件领域知识分享 4128
上一篇: 开源协议全解析:类型、选择与法律风险规避指南
下一篇: 【开源分享】Conan:C/C++开发者的包管理神器
智驾
博客等级 码龄11年 6670粉丝 574原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

智驾

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值