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

C++中的生成器模式

目录

生成器模式(Builder Pattern)

实际应用

构建一辆汽车

构建一台计算机

构建一个房子

总结


生成器模式(Builder Pattern)

生成器模式是一种创建型设计模式,它允许你分步骤创建复杂对象。与其他创建型模式不同的是,生成器模式允许你在一个过程中创建一个对象,而无需等待所有部分都准备好。这种模式特别适用于需要构造不同表示或状态的复杂对象时。

实际应用

1. 需要构造的对象包含多个部分,且需要分步骤创建。
2. 希望使用相同的创建过程来构造不同表示的对象。
3. 构造过程需要能够被隔离和独立变化。

构建一辆汽车

假设我们有一个`Car`类,它有很多可选属性,例如车的颜色、发动机类型、轮胎类型等等。

#include <iostream>
#include <string>class Car {
public:std::string color;std::string engine;std::string tires;std::string interior;void show() {std::cout << "Car Details:\n"<< "Color: " << color << "\n"<< "Engine: " << engine << "\n"<< "Tires: " << tires << "\n"<< "Interior: " << interior << "\n";}
};class CarBuilder {
private:Car car;
public:CarBuilder& setColor(const std::string& color) {car.color = color;return *this;}CarBuilder& setEngine(const std::string& engine) {car.engine = engine;return *this;}CarBuilder& setTires(const std::string& tires) {car.tires = tires;return *this;}CarBuilder& setInterior(const std::string& interior) {car.interior = interior;return *this;}Car build() {return car;}
};int main() {CarBuilder builder;Car car = builder.setColor("Red").setEngine("V8").setTires("Sport").setInterior("Leather").build();car.show();return 0;
}

构建一台计算机

假设我们有一个`Computer`类,它有很多可选属性,例如CPU类型、RAM大小、存储类型和大小等等。

#include <iostream>
#include <string>class Computer {
public:std::string cpu;int ram;std::string storageType;int storageSize;void show() {std::cout << "Computer Details:\n"<< "CPU: " << cpu << "\n"<< "RAM: " << ram << " GB\n"<< "Storage Type: " << storageType << "\n"<< "Storage Size: " << storageSize << " GB\n";}
};class ComputerBuilder {
private:Computer computer;
public:ComputerBuilder& setCPU(const std::string& cpu) {computer.cpu = cpu;return *this;}ComputerBuilder& setRAM(int ram) {computer.ram = ram;return *this;}ComputerBuilder& setStorageType(const std::string& storageType) {computer.storageType = storageType;return *this;}ComputerBuilder& setStorageSize(int storageSize) {computer.storageSize = storageSize;return *this;}Computer build() {return computer;}
};int main() {ComputerBuilder builder;Computer computer = builder.setCPU("Intel i9").setRAM(32).setStorageType("SSD").setStorageSize(1024).build();computer.show();return 0;
}

构建一个房子

假设我们有一个`House`类,它有很多可选属性,例如房间数量、楼层数量、花园是否存在、是否有车库等等。

#include <iostream>
#include <string>class House {
public:int rooms;int floors;bool garden;bool garage;void show() {std::cout << "House Details:\n"<< "Rooms: " << rooms << "\n"<< "Floors: " << floors << "\n"<< "Garden: " << (garden ? "Yes" : "No") << "\n"<< "Garage: " << (garage ? "Yes" : "No") << "\n";}
};class HouseBuilder {
private:House house;
public:HouseBuilder& setRooms(int rooms) {house.rooms = rooms;return *this;}HouseBuilder& setFloors(int floors) {house.floors = floors;return *this;}HouseBuilder& setGarden(bool garden) {house.garden = garden;return *this;}HouseBuilder& setGarage(bool garage) {house.garage = garage;return *this;}House build() {return house;}
};int main() {HouseBuilder builder;House house = builder.setRooms(5).setFloors(2).setGarden(true).setGarage(true).build();house.show();return 0;
}

总结

每个生成器类负责设置对象的各个属性,并在最终构建出对象。

http://www.lryc.cn/news/370115.html

相关文章:

  • 基于python的PDF文件解析器汇总
  • C++多线程同步总结
  • 【机器学习】基于CNN-RNN模型的验证码图片识别
  • 一文读懂Samtec分离式线缆组件选型 | 快速攻略
  • 批量申请SSL证书如何做到既方便成本又最低
  • Python 设计模式(创建型)
  • PyTorch 索引与切片-Tensor基本操作
  • 深入浅出 LangChain 与智能 Agent:构建下一代 AI 助手
  • scss是什么安装使⽤的步骤
  • Pspark从hive读数据写到Pgsql数据库
  • Pixi.js学习 (六)数组
  • 操作系统复习-Linux的文件系统
  • 代码随想录算法训练营第三十六天| 860.柠檬水找零、 406.根据身高重建队列、 452. 用最少数量的箭引爆气球
  • 如何在C#中实现多线程
  • 【LLM】快速了解Dify 0.6.10的核心功能:知识库检索、Agent创建和工作流编排(二)
  • 【介绍下Pandas,什么是Pandas?】
  • linux系统安装anaconda,并通过java程序调用python程序
  • Stable diffusion的SDXL模型,针不错!(含实操)
  • wordpress轻量免费主题
  • Go AfterFunc 不触发
  • 小程序视图渲染数据和部分事件的绑定
  • “探索AIGC市场:腾讯元宝APP加入竞争,大模型产品的未来走向与个人选择“
  • node设置镜像源详细教程
  • 四季变换,制氮机使用注意事项
  • 如何实现办公终端安全
  • 【云岚到家】-day01-项目熟悉-查询区域服务开发
  • Docker面试整理-如何进行Docker镜像的构建和发布?
  • macOS Sequoia 将 Mac 生产力与智能化提升至全新高度 (macOS 15 ISO、IPSW、PKG 下载)
  • 用户管理与服务器远程管理
  • Pytorch 实现简单的 线性回归 算法