模式特点
将一个复杂对象的构建与它的表示分离,使得同样的构建过程可以创建不同的表示。建造者模式关注逐步构建复杂对象。
- 分步创建复杂对象,控制构建过程
- 相同的构建过程可以产生不同的产品
- 客户端不需要知道内部构建细节
- Qt 中大量使用链式调用风格
类图
应用场景
- Qt 对象链式构建:QStringBuilder、QFont 的属性设置
- SQL 查询语句构建器:逐步拼接 SELECT、FROM、WHERE
- 配置对象构建:复杂的多参数配置项
- 文档生成器:HTML/XML/PDF 逐步构建
- 协议数据包组装:逐个添加消息头和消息体
示例代码(C++)
// 产品类 class Computer { public: std::string cpu, gpu, ram, storage; void show() { std::cout << "CPU:" << cpu << " GPU:" << gpu << std::endl; } }; // 抽象建造者 class ComputerBuilder { protected: Computer* m_computer; public: virtual ComputerBuilder& setCpu(const std::string& cpu) = 0; virtual ComputerBuilder& setGpu(const std::string& gpu) = 0; virtual Computer* build() = 0; virtual ~ComputerBuilder() = default; }; // 具体建造者 - 链式调用 class GamePCBuilder : public ComputerBuilder { public: GamePCBuilder() { m_computer = new Computer(); } ComputerBuilder& setCpu(const std::string& cpu) override { m_computer->cpu = cpu; return *this; } ComputerBuilder& setGpu(const std::string& gpu) override { m_computer->gpu = gpu; return *this; } Computer* build() override { return m_computer; } }; // 使用 Computer* pc = GamePCBuilder() .setCpu("i9-13900K") .setGpu("RTX 4090") .build();