【C++】【设计模式】建造者模式

#include <iostream>
#include <string>

// "Product"
class Car {
public:
    void setEngine(const std::string& engine) {
        engine_ = engine;
    }

    void setBody(const std::string& body) {
        body_ = body;
    }

    void setColor(const std::string& color) {
        color_ = color;
    }

    void setSeats(const std::string& seats) {
        seats_ = seats;
    }

    std::string getConfiguration() const {
        return "Engine: " + engine_ + "\nBody: " + body_ + "\nColor: " + color_ + "\nSeats: " + seats_;
    }

private:
    std::string engine_;
    std::string body_;
    std::string color_;
    std::string seats_;
};

// "Builder"
class CarBuilder {
public:
    virtual ~CarBuilder() = default;

    virtual void buildEngine() = 0;
    virtual void buildBody() = 0;
    virtual void paintColor() = 0;
    virtual void installSeats() = 0;

    Car* getResult() const {
        return car_;
    }

protected:
    Car* car_ = nullptr;
};

// "ConcreteBuilder"
class SportCarBuilder : public CarBuilder {
public:
    SportCarBuilder() {
        car_ = new Car();
    }

    void buildEngine() override {
        car_->setEngine("V8 engine");
    }

    void buildBody() override {
        car_->setBody("Sport car body");
    }

    void paintColor() override {
        car_->setColor("Red");
    }

    void installSeats() override {
        car_->setSeats("Leather seats");
    }
};

// "Director"
class Director {
public:
    void construct(CarBuilder* builder) {
        builder->buildEngine();
        builder->buildBody();
        builder->paintColor();
        builder->installSeats();
    }
};

int main() {
    Director director;

    CarBuilder* builder = new SportCarBuilder();

    director.construct(builder);

    Car* car = builder->getResult();

    std::cout << car->getConfiguration() << std::endl;

    delete car;
    delete builder;

    return 0;
}
下面展示一些 `内联代码片`。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值