54 lines
1.3 KiB
C++
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);
|
|
} |