0

0

C++建造者模式 复杂对象分步构造

P粉602998670

P粉602998670

发布时间:2025-08-28 12:19:01

|

964人浏览过

|

来源于php中文网

原创

建造者模式通过分离复杂对象的构建与表示,解决构造函数参数过多、可选参数组合复杂等问题,以分步构建方式实现灵活的对象创建。

c++建造者模式 复杂对象分步构造

在C++中,建造者模式(Builder Pattern)用于将一个复杂对象的构建过程与其表示分离,使得同样的构建过程可以创建不同的表示。它特别适用于对象构造步骤多、参数复杂、存在多种变体的情况,避免构造函数参数过多或出现“伸缩构造函数”问题。

建造者模式解决的问题

当一个类的构造过程涉及多个可选参数、嵌套对象或需要按特定顺序初始化时,直接使用构造函数会变得难以维护。例如:

  • 构造函数参数过多,调用时容易出错
  • 部分字段可选,但无法通过重载覆盖所有组合
  • 对象创建需要多步操作,如配置、验证、组装子对象等

建造者模式通过将构造逻辑封装到独立的“建造者”类中,分步设置属性,最后统一生成目标对象。

基本实现结构

以构建一个Computer类为例,它包含CPU、内存、硬盘、操作系统等组件,部分为必选,部分可选。

立即学习C++免费学习笔记(深入)”;

class Computer {
private:
   std::string cpu;
   int memory;
   std::string storage;
   std::string os;

   // 私有构造函数,只能由Builder调用
   Computer(const std::string& c, int m, const std::string& s) : cpu(c), memory(m), storage(s) {}

public:
   void setOS(const std::string& o) { os = o; }
   void display() const {
      std::cout    }

   // 建造者类
   class Builder {
   private:
      std::string cpu;
      int memory;
      std::string storage;
      std::string os = "None";

   public:
      Builder& setCPU(const std::string& c) { cpu = c; return *this; }
      Builder& setMemory(int m) { memory = m; return *this; }
      Builder& setStorage(const std::string& s) { storage = s; return *this; }
      Builder& setOS(const std::string& o) { os = o; return *this; }

      Computer build() {
         Computer comp(cpu, memory, storage);
         comp.setOS(os);
         return comp;
      }
   };
};

使用方式与链式调用

通过建造者,可以清晰、灵活地构造对象:

企业建站系统2.0
企业建站系统2.0

系统是针对于企业用户量身打造的一款简单的程序,只要你懂一点html语言你就可以轻轻松松的创建一个自己的企业官网,品牌官网、为了更好的让各位开发者可以简单的制作自己满意的模板,我们官网论坛提供了模板变量(模板标签)可以让大家轻松制作自己的企业官网。 更新说明:修复专题页面添加产品不显示问题 功能列表:1.设置中心2.分类栏目3.关于我们4.联系我们5.招聘中心6.留言方式7.支持伪静态8.支持生成静

下载
int main() {
   Computer comp1 = Computer::Builder()
      .setCPU("i7")
      .setMemory(16)
      .setStorage("512GB SSD")
      .setOS("Windows 11")
      .build();

   comp1.display();

   Computer comp2 = Computer::Builder()
      .setCPU("Ryzen 5")
      .setMemory(8)
      .setStorage("1TB HDD")
      .build();

   comp2.display();
   return 0;
}

这种链式调用方式直观、可读性强,每一步都明确设置一个属性。

适用场景与优势

建造者模式适合以下情况:

  • 构造函数参数超过4个,尤其是存在多个可选参数
  • 对象创建需要多步验证或依赖顺序
  • 需要生成同一类的不同配置实例(如不同型号电脑、不同配置的网络请求)
  • 希望代码更具可读性和可维护性

优势包括:

  • 避免构造函数爆炸
  • 提升代码可读性,构造过程清晰
  • 支持不可变对象(一旦build完成,不再修改)
  • 易于扩展新的构建步骤或产品变体

基本上就这些。建造者模式在C++中虽然不像Java那样常见,但在构建复杂对象时非常实用,尤其配合RAII和移动语义,能写出既安全又高效的构造逻辑。

相关专题

更多
string转int
string转int

在编程中,我们经常会遇到需要将字符串(str)转换为整数(int)的情况。这可能是因为我们需要对字符串进行数值计算,或者需要将用户输入的字符串转换为整数进行处理。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

312

2023.08.02

c语言const用法
c语言const用法

const是关键字,可以用于声明常量、函数参数中的const修饰符、const修饰函数返回值、const修饰指针。详细介绍:1、声明常量,const关键字可用于声明常量,常量的值在程序运行期间不可修改,常量可以是基本数据类型,如整数、浮点数、字符等,也可是自定义的数据类型;2、函数参数中的const修饰符,const关键字可用于函数的参数中,表示该参数在函数内部不可修改等等。

519

2023.09.20

string转int
string转int

在编程中,我们经常会遇到需要将字符串(str)转换为整数(int)的情况。这可能是因为我们需要对字符串进行数值计算,或者需要将用户输入的字符串转换为整数进行处理。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

312

2023.08.02

int占多少字节
int占多少字节

int占4个字节,意味着一个int变量可以存储范围在-2,147,483,648到2,147,483,647之间的整数值,在某些情况下也可能是2个字节或8个字节,int是一种常用的数据类型,用于表示整数,需要根据具体情况选择合适的数据类型,以确保程序的正确性和性能。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

522

2024.08.29

c++怎么把double转成int
c++怎么把double转成int

本专题整合了 c++ double相关教程,阅读专题下面的文章了解更多详细内容。

48

2025.08.29

C++中int的含义
C++中int的含义

本专题整合了C++中int相关内容,阅读专题下面的文章了解更多详细内容。

190

2025.08.29

javascriptvoid(o)怎么解决
javascriptvoid(o)怎么解决

javascriptvoid(o)的解决办法:1、检查语法错误;2、确保正确的执行环境;3、检查其他代码的冲突;4、使用事件委托;5、使用其他绑定方式;6、检查外部资源等等。本专题为大家提供相关的文章、下载、课程内容,供大家免费下载体验。

173

2023.11.23

java中void的含义
java中void的含义

本专题整合了Java中void的相关内容,阅读专题下面的文章了解更多详细内容。

92

2025.11.27

php源码安装教程大全
php源码安装教程大全

本专题整合了php源码安装教程,阅读专题下面的文章了解更多详细内容。

7

2025.12.31

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
Rust 教程
Rust 教程

共28课时 | 4万人学习

PostgreSQL 教程
PostgreSQL 教程

共48课时 | 6.3万人学习

Git 教程
Git 教程

共21课时 | 2.3万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号