#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;
}
下面展示一些 `内联代码片`。
【C++】【设计模式】建造者模式
最新推荐文章于 2024-07-30 09:43:39 发布