建造者模式(C++)

embedded/2024/10/19 2:29:23/

定义:建造者模式(Builder Pattern)是一种创建型设计模式,它主要用于构建一个复杂对象,并将其构建过程与表示分离,使得同样的构建过程可以创建不同的表示。该模式通过将复杂对象的构建过程分解为多个简单的步骤,每个步骤由独立的建造者对象负责,从而实现了构建过程的可控性和灵活性。

        代码:

// 产品类:计算机
class Computer {
private:std::string CPU;std::string RAM;std::string STORAGE;std::string GPU;
public:void setCPU(const std::string& cpu){CPU = cpu;}void setRAM(const std::string& ram){RAM = ram;}void setStorage(const std::string& storage){STORAGE = storage;}void setGPU(const std::string& gpu){GPU = gpu;}// 显示计算机配置void show() const {std::cout << "Computer [CPU=" << CPU << ", RAM=" << RAM << ", storage=" << STORAGE << ", GPU=" << GPU << "]" << std::endl;}
private:// 私有构造函数,避免直接创建对象Computer(){}// 友元类,允许Builder访问私有构造函数friend class ComputerBuilder;};// 抽象建造者类
class ComputerBuilder {
public:virtual ~ComputerBuilder() = default;virtual void setCPU(const std::string& cpu) = 0;virtual void setRAM(const std::string& ram) = 0;virtual void setStorage(const std::string& storage) = 0;virtual void setGPU(const std::string& gpu) = 0;virtual Computer* getResult() = 0;
protected:Computer* createComputer(){return  new Computer();}
protected:Computer* computer = nullptr;
};// 具体建造者类
class ConcreteComputerBuilder : public ComputerBuilder {public:ConcreteComputerBuilder() {computer = nullptr;}void setCPU(const std::string& cpu) override {if(computer == nullptr){computer = createComputer();}computer->setCPU(cpu);}void setRAM(const std::string& ram) override {if(computer == nullptr){computer = createComputer();}computer->setRAM(ram);}void setStorage(const std::string& storage) override {if(computer == nullptr){computer = createComputer();}computer->setStorage(storage);}void setGPU(const std::string& gpu) override {if(computer == nullptr){computer = createComputer();}computer->setGPU(gpu);}Computer* getResult() override {Computer* temp = computer;computer = nullptr; // 重置指针,避免内存泄漏(这里只是为了简化示例)return temp;}
};// 指挥者类
class ComputerDirector {
private:ComputerBuilder* builder;public:ComputerDirector(ComputerBuilder* builder) : builder(builder) {}~ComputerDirector(){delete builder;}void setBuilder(ComputerBuilder* builder){if(this->builder){delete this->builder;}this->builder = builder;}void constructGamingComputer() {if(!builder)return;builder->setCPU("Intel Core i9");builder->setRAM("32GB");builder->setStorage("1TB SSD");builder->setGPU("NVIDIA GeForce RTX 3080");}void constructOfficeComputer() {if(!builder)return;builder->setCPU("Intel Core i5");builder->setRAM("16GB");builder->setStorage("512GB SSD");builder->setGPU("Integrated Graphics");}
};// 客户端代码
int main() {ComputerBuilder* builder = new ConcreteComputerBuilder();ComputerDirector director(builder);// 构建游戏电脑director.constructGamingComputer();Computer* gamingComputer = builder->getResult();gamingComputer->show();delete gamingComputer;// 构建办公电脑builder = new ConcreteComputerBuilder();director.setBuilder(builder);director.constructOfficeComputer();Computer* officeComputer = builder->getResult();officeComputer->show();delete officeComputer;return 0;
}


http://www.ppmy.cn/embedded/128621.html

相关文章

洗衣店订单管理:Spring Boot技术突破

5系统详细实现 5.1 管理员模块的实现 5.1.1 顾客信息管理 洗衣店订单管理系统的系统管理员可以管理顾客&#xff0c;可以对顾客信息添加修改删除以及查询操作。具体界面的展示如图5.1所示。 图5.1 顾客信息管理界面 5.1.2 店家信息管理 系统管理员可以查看对店家信息进行添加…

渗透测试导论

渗透测试的定义和目的 渗透测试&#xff08;Penetration Testing&#xff09;是一项安全演习&#xff0c;网络安全专家尝试查找和利用计算机系统中的漏洞。 模拟攻击的目的是识别攻击者可以利用的系统防御中的薄弱环节。 这就像银行雇用别人假装盗匪&#xff0c;让他们试图闯…

录自己一段音频,后续根据文字生成自己音色的音频(java实现)

目前自定义TTS&#xff08;文字转语音&#xff09;技术已经比较成熟了&#xff0c;在很多场景都有运用。比较常见的多是一些系统预制好的音色&#xff0c;然后提供文字&#xff0c;即可出来这个音色出来的音频。 随着AI技术的不断发展&#xff0c;以及大家对自定义音色的产品诉…

Spring Security 如何进行权限验证

阅读本文之前&#xff0c;请投票支持这款 全新设计的脚手架 &#xff0c;让 Java 再次伟大&#xff01; FilterSecurityInterceptor FilterSecurityInterceptor 是负责权限验证的过滤器。一般来说&#xff0c;权限验证是一系列业务逻辑处理完成以后&#xff0c;最后需要解决的…

VSCode运行QT界面

VSCode用久了,感觉Qt Creator的写起代码来还是不如VSCode得心应手,虽然目前还是存在一些问题,先把目前实现的状况做个记录,后续有机会再进一步优化。 当前方式 通过QtCreator创建一个CMake项目,然后使用CMake的方式在VSCode中进行编译。 claude给出的建议 左上角的名字会…

【Python从入门到进阶】66、Pandas怎样实现groupby每个分组的apply

接上篇《65、Pandas如何批量拆分与合并Excel文件》 上一篇我们学习了Pandas如何批量拆分与合并Excel文件&#xff0c;本篇我们来学习Pandas怎样实现groupby每个分组的apply。 一、Pandas中的groupby方法 1、groupby的基本概念 groupby方法的作用&#xff1a;groupby方法是Pa…

IBM Flex System服务器硬件监控指标解读

随着企业IT架构的日益复杂&#xff0c;服务器的稳定运行对于保障业务连续性至关重要。IBM Flex System作为一款模块化、可扩展的服务器解决方案&#xff0c;广泛应用于各种企业级环境中。为了确保IBM Flex System服务器的稳定运行&#xff0c;监控易作为一款专业的IT基础设施监…

Golang | Leetcode Golang题解之第473题火柴拼正方形

题目&#xff1a; 题解&#xff1a; func makesquare(matchsticks []int) bool {totalLen : 0for _, l : range matchsticks {totalLen l}if totalLen%4 ! 0 {return false}tLen : totalLen / 4dp : make([]int, 1<<len(matchsticks))for i : 1; i < len(dp); i {dp…