C++ 设计模式-建造者模式

以下是一个完整的C++建造者模式示例,包含产品类、建造者接口、具体建造者、指挥者以及测试代码:

cpp 复制代码
#include <iostream>
#include <string>
#include <memory>

// 产品类:汽车
class Car {
public:
    void setBody(const std::string& body) { m_body = body; }
    void setEngine(const std::string& engine) { m_engine = engine; }
    void setWheels(int wheels) { m_wheels = wheels; }
    void setElectronics(const std::string& electronics) { m_electronics = electronics; }

    void show() const {
        std::cout << "Car Details:\n"
                  << "Body: " << m_body << "\n"
                  << "Engine: " << m_engine << "\n"
                  << "Wheels: " << m_wheels << "\n"
                  << "Electronics: " << m_electronics << "\n\n";
    }

private:
    std::string m_body;
    std::string m_engine;
    int m_wheels = 0;
    std::string m_electronics;
};

// 抽象建造者
class CarBuilder {
public:
    virtual ~CarBuilder() = default;
    virtual void buildBody() = 0;
    virtual void buildEngine() = 0;
    virtual void buildWheels() = 0;
    virtual void buildElectronics() = 0;
    virtual Car getResult() = 0;
};

// 具体建造者:运动型汽车
class SportsCarBuilder : public CarBuilder {
public:
    void buildBody() override { m_car.setBody("Carbon Fiber Body"); }
    void buildEngine() override { m_car.setEngine("V8 Twin Turbo"); }
    void buildWheels() override { m_car.setWheels(4); }
    void buildElectronics() override { m_car.setElectronics("Racing Package"); }
    Car getResult() override { return std::move(m_car); }

private:
    Car m_car;
};

// 具体建造者:家用汽车
class FamilyCarBuilder : public CarBuilder {
public:
    void buildBody() override { m_car.setBody("Steel Body"); }
    void buildEngine() override { m_car.setEngine("1.6L Inline-4"); }
    void buildWheels() override { m_car.setWheels(4); }
    void buildElectronics() override { m_car.setElectronics("Basic Package"); }
    Car getResult() override { return std::move(m_car); }

private:
    Car m_car;
};

// 指挥者
class Director {
public:
    void setBuilder(CarBuilder* builder) { m_builder = builder; }

    void constructCar() {
        m_builder->buildBody();
        m_builder->buildEngine();
        m_builder->buildWheels();
        m_builder->buildElectronics();
    }

private:
    CarBuilder* m_builder;
};

// 测试代码
int main() {
    Director director;
    
    // 建造运动型汽车
    SportsCarBuilder sportsBuilder;
    director.setBuilder(&sportsBuilder);
    director.constructCar();
    Car sportsCar = sportsBuilder.getResult();
    sportsCar.show();

    // 建造家用汽车
    FamilyCarBuilder familyBuilder;
    director.setBuilder(&familyBuilder);
    director.constructCar();
    Car familyCar = familyBuilder.getResult();
    familyCar.show();

    return 0;
}

输出结果:

复制代码
Car Details:
Body: Carbon Fiber Body
Engine: V8 Twin Turbo
Wheels: 4
Electronics: Racing Package

Car Details:
Body: Steel Body
Engine: 1.6L Inline-4
Wheels: 4
Electronics: Basic Package

代码结构说明:

  1. Car类:最终要构建的复杂对象,包含车身、发动机、轮子等组件

  2. CarBuilder抽象类

    • 定义构建汽车各个组件的接口
    • 包含4个纯虚函数用于构建不同部件
    • 提供获取最终产品的接口
  3. 具体建造者

    • SportsCarBuilder:实现运动型汽车的建造细节
    • FamilyCarBuilder:实现家用汽车的建造细节
    • 每个具体建造者维护自己的Car实例
  4. Director类

    • 控制建造流程
    • 定义建造顺序(先车身→发动机→轮子→电子设备)
    • 通过组合不同的建造者来创建不同产品
  5. 测试代码

    • 演示如何使用建造者模式创建不同类型的产品
    • 通过切换建造者来改变最终产品
    • 保持创建过程的一致性
相关推荐
编程小白20268 小时前
从 C++ 基础到效率翻倍:Qt 开发环境搭建与Windows 神级快捷键指南
开发语言·c++·windows·qt·学习
.小墨迹8 小时前
apollo学习之借道超车的速度规划
linux·c++·学习·算法·ubuntu
历程里程碑9 小时前
Linux20 : IO
linux·c语言·开发语言·数据结构·c++·算法
郝学胜-神的一滴9 小时前
深入浅出:使用Linux系统函数构建高性能TCP服务器
linux·服务器·开发语言·网络·c++·tcp/ip·程序人生
天若有情6739 小时前
【自研实战】轻量级ASCII字符串加密算法:从设计到落地(防查岗神器版)
网络·c++·算法·安全·数据安全·加密
czy878747510 小时前
深入了解 C++ 中的 `std::bind` 函数
开发语言·c++
我在人间贩卖青春10 小时前
C++之继承的方式
c++·private·public·protected·继承方式
BD_Marathon10 小时前
设计模式——依赖倒转原则
java·开发语言·设计模式
BD_Marathon10 小时前
设计模式——里氏替换原则
java·设计模式·里氏替换原则
jmxwzy10 小时前
设计模式总结
设计模式