建造者模式
建造者把产品细节的实现过程单独封装成类,完成产品本身和创建产品之间的解耦。每一个建造者都相对独立,因此在建造细节实现方面实现了灵活性和可扩展性。
建造者模式和工厂模式的区别:工厂模式关心把这个产品创建出来,而不关心其细节;建造者模式不仅需要把产品生产出来,还需要关心生产细节。文章来源:https://www.toymoban.com/news/detail-820805.html
建造者的核心在于将建造者独立成不同的子类,以实现建造过程的灵活性和可扩展性。文章来源地址https://www.toymoban.com/news/detail-820805.html
示例代码
#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();
}
到了这里,关于(十四)Head first design patterns建造者模式(c++)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!