建造者模式
建造者把产品细节的实现过程单独封装成类,完成产品本身和创建产品之间的解耦。每一个建造者都相对独立,因此在建造细节实现方面实现了灵活性和可扩展性。
建造者模式和工厂模式的区别:工厂模式关心把这个产品创建出来,而不关心其细节;建造者模式不仅需要把产品生产出来,还需要关心生产细节。
建造者的核心在于将建造者独立成不同的子类,以实现建造过程的灵活性和可扩展性。
示例代码
#include<iostream> #include<string> using namespace std; class Meal{ public: void setBurger(string str){ burger = str; } void setFries(string str){ fries = str; } void setDrink(string str){ drink = str; } void print(){ std::cout << burger << std::endl; std::cout << fries << std::endl; std::cout << drink << std::endl; } private: string burger; string fries; string drink; }; class MealBuilder{ public: virtual void buildBurger(){} virtual void buildFries(){} virtual void buildDrink(){} virtual Meal* getMeal(){ return meal; } Meal* meal = new Meal(); }; class ChickenMealBuilder : public MealBuilder{ public: void buildBurger(){ meal->setBurger("鸡肉汉堡"); } void buildFries(){ meal->setFries("中份薯条"); } void buildDrink(){ meal->setDrink("大杯果汁"); } }; class BeefBurgerMealBuilder : public MealBuilder{ public: void buildBurger(){ meal->setBurger("牛肉汉堡"); } void buildFries(){ meal->setFries("大份薯条"); } void buildDrink(){ meal->setDrink("中杯可乐"); } }; class ShrimpMealBuilder : public MealBuilder{ public: void buildBurger(){ meal->setBurger("虾肉汉堡"); } void buildFries(){ meal->setFries("小份薯条"); } void buildDrink(){ meal->setDrink("大杯芬达"); } }; class MealDirector{ public: void setMealBuilder(MealBuilder* mealBuilder){ this->mealBuilder = mealBuilder; } Meal* getMeal(){ return mealBuilder->getMeal(); } void constructMeal(){ mealBuilder->buildBurger(); mealBuilder->buildFries(); mealBuilder->buildDrink(); } private: MealBuilder* mealBuilder; }; int main(){ MealDirector* director = new MealDirector(); director->setMealBuilder(new BeefBurgerMealBuilder()); director->constructMeal(); Meal* meal = director->getMeal(); meal->print(); }