设计模式---构建者模式(Builder Pattern)

构建者模式(Builder Pattern) 是一种创建型设计模式,旨在将复杂对象的构建过程与其表示分离。它允许使用相同的构建过程创建不同的表示。该模式通常用于构建复杂对象,这些对象由多个部分组成或具有多个可选属性。

构建者模式的核心要素

  1. Builder(构建者):定义构建对象的接口,声明创建部分对象的方法。
  2. ConcreteBuilder(具体构建者) :实现 Builder 接口,构建并装配各个部件,提供一个方法以获取最终构建的对象。
  3. Director(指挥者) :构建过程中的协调者,使用 Builder 对象来构建产品。
  4. Product(产品) :由 Builder 构建的最终对象,通常包含多个部件。

示例:创建一个复杂的 Computer 对象

我们将使用构建者模式来创建一个 Computer 对象。一个 Computer 可能包括处理器、内存、硬盘和显卡等部件。

1. 定义 Computer 类(产品)
cpp 复制代码
#include <string>
#include <iostream>

class Computer {
public:
    void setCPU(const std::string &cpu) { m_cpu = cpu; }
    void setRAM(const std::string &ram) { m_ram = ram; }
    void setStorage(const std::string &storage) { m_storage = storage; }
    void setGPU(const std::string &gpu) { m_gpu = gpu; }

    void showSpecs() const {
        std::cout << "Computer Specifications:" << std::endl;
        std::cout << "CPU: " << m_cpu << std::endl;
        std::cout << "RAM: " << m_ram << std::endl;
        std::cout << "Storage: " << m_storage << std::endl;
        std::cout << "GPU: " << m_gpu << std::endl;
    }

private:
    std::string m_cpu;
    std::string m_ram;
    std::string m_storage;
    std::string m_gpu;
};
  1. 定义 Builder 接口
cpp 复制代码
class ComputerBuilder {
public:
    virtual ~ComputerBuilder() = default;

    virtual void buildCPU() = 0;
    virtual void buildRAM() = 0;
    virtual void buildStorage() = 0;
    virtual void buildGPU() = 0;

    virtual Computer* getComputer() = 0;
};
  1. 定义 ConcreteBuilder(具体构建者)
cpp 复制代码
class GamingComputerBuilder : public ComputerBuilder {
public:
    GamingComputerBuilder() { m_computer = new Computer(); }
    ~GamingComputerBuilder() { delete m_computer; }

    void buildCPU() override { m_computer->setCPU("High-end CPU"); }
    void buildRAM() override { m_computer->setRAM("16GB RAM"); }
    void buildStorage() override { m_computer->setStorage("1TB SSD"); }
    void buildGPU() override { m_computer->setGPU("High-end GPU"); }

    Computer* getComputer() override { return m_computer; }

private:
    Computer* m_computer;
};
  1. 定义 Director(指挥者)
cpp 复制代码
class ComputerDirector {
public:
    ComputerDirector(ComputerBuilder* builder) : m_builder(builder) {}

    void construct() {
        m_builder->buildCPU();
        m_builder->buildRAM();
        m_builder->buildStorage();
        m_builder->buildGPU();
    }

private:
    ComputerBuilder* m_builder;
};
  1. 使用构建者模式
cpp 复制代码
int main() {
    // 创建具体构建者对象
    ComputerBuilder* builder = new GamingComputerBuilder();

    // 创建指挥者对象,并传入具体构建者
    ComputerDirector director(builder);

    // 开始构建过程
    director.construct();

    // 获取构建完成的产品
    Computer* computer = builder->getComputer();
    computer->showSpecs();

    // 清理资源
    delete computer;
    delete builder;

    return 0;
}

解释

  • Computer 类是最终构建的对象,包含多个属性(部件)。
  • ComputerBuilder 是构建者接口,定义了构建每个部件的方法。
  • GamingComputerBuilder 是一个具体构建者,实现了构建每个部件的方法,并返回最终构建的 Computer 对象。
  • ComputerDirector 使用构建者来构建产品,它知道如何一步一步地构建 Computer 对象,但不直接处理构建过程的细节。
  • main 函数 中创建了一个 GamingComputerBuilder 实例和一个 ComputerDirector 实例,然后使用 ComputerDirector 来构建 Computer 对象,并显示其规格。

通过构建者模式,你可以轻松地创建不同配置的 Computer 对象(如 GamingComputerBuilder),并且可以在不改变构建过程的情况下,创建其他类型的计算机(例如 OfficeComputerBuilder)。

相关推荐
CaffeinePro2 小时前
四⼤极简架构原则KISS/DRY/YAGNI/LOD
设计模式·架构
霸道流氓气质3 小时前
SpringBoot中设计模式组合使用示例-策略、模板、观察者、门面、工厂、单例。
spring boot·后端·设计模式
ttod_qzstudio5 小时前
【软考设计模式】观察者模式:一对多依赖的自动通知与订阅解耦精讲
观察者模式·设计模式
ttod_qzstudio7 小时前
【软考设计模式】命令模式:请求封装与调用接收解耦的精讲
设计模式·命令模式
春卷同学7 小时前
HarmonyOS掌上记账APP开发实践第5篇:鸿蒙 EventBus 设计模式 — MoneyTrack 跨模块通信解密
华为·设计模式·harmonyos
春卷同学9 小时前
HarmonyOS掌上记账APP开发实践第3篇:接口与实现分离 — MoneyTrack Types.ets 与 Models.ets 的双层设计模式
设计模式
NG4771 天前
【软件设计与体系结构】-策略设计模式
java·设计模式·软件工程
CaffeinePro1 天前
SOLID五大设计原则:重构优雅代码与架构的底层规范
设计模式·架构
饮茶三千1 天前
电子保函模板编辑器实战二:HTML→FTL 编译转换的设计与实现
前端·vue.js·设计模式
Kel1 天前
Node.js 本质:从全脉络视角理解运行时原理
javascript·设计模式·node.js