DesignPatterns/c++/builder.cc
2025-07-10 22:26:33 +08:00

54 lines
1.3 KiB
C++

/**
* @name 建造者模式
* @brief: 分步构造复杂对象
* @note 场景:创建包含多个配置选项的对象(如电脑配置、订单)
*/
class Pizza {
public:
void setDough(const std::string& d) { dough = d; }
void setSauce(const std::string& s) { sauce = s; }
void addTopping(const std::string& t) { toppings.push_back(t); }
private:
std::string dough;
std::string sauce;
std::vector<std::string> toppings;
};
class PizzaBuilder {
public:
virtual void buildDough() = 0;
virtual void buildSauce() = 0;
virtual void buildToppings() = 0;
Pizza* getPizza() { return pizza; }
protected:
Pizza* pizza = new Pizza();
};
class HawaiianBuilder : public PizzaBuilder {
public:
void buildDough() override { pizza->setDough("cross"); }
void buildSauce() override { pizza->setSauce("mild"); }
void buildToppings() override {
pizza->addTopping("ham");
pizza->addTopping("pineapple");
}
};
class Director {
public:
Pizza* makePizza(PizzaBuilder* builder) {
builder->buildDough();
builder->buildSauce();
builder->buildToppings();
return builder->getPizza();
}
};
// 使用
int main()
{
Director director;
HawaiianBuilder builder;
Pizza* pizza = director.makePizza(&builder);
}