建造者模式
建造者把產(chǎn)品細(xì)節(jié)的實(shí)現(xiàn)過(guò)程單獨(dú)封裝成類,完成產(chǎn)品本身和創(chuàng)建產(chǎn)品之間的解耦。每一個(gè)建造者都相對(duì)獨(dú)立,因此在建造細(xì)節(jié)實(shí)現(xiàn)方面實(shí)現(xiàn)了靈活性和可擴(kuò)展性。
建造者模式和工廠模式的區(qū)別:工廠模式關(guān)心把這個(gè)產(chǎn)品創(chuàng)建出來(lái),而不關(guān)心其細(xì)節(jié);建造者模式不僅需要把產(chǎn)品生產(chǎn)出來(lái),還需要關(guān)心生產(chǎn)細(xì)節(jié)。文章來(lái)源:http://www.zghlxwxcb.cn/news/detail-820805.html
建造者的核心在于將建造者獨(dú)立成不同的子類,以實(shí)現(xiàn)建造過(guò)程的靈活性和可擴(kuò)展性。文章來(lái)源地址http://www.zghlxwxcb.cn/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("中份薯?xiàng)l");
}
void buildDrink(){
meal->setDrink("大杯果汁");
}
};
class BeefBurgerMealBuilder : public MealBuilder{
public:
void buildBurger(){
meal->setBurger("牛肉漢堡");
}
void buildFries(){
meal->setFries("大份薯?xiàng)l");
}
void buildDrink(){
meal->setDrink("中杯可樂(lè)");
}
};
class ShrimpMealBuilder : public MealBuilder{
public:
void buildBurger(){
meal->setBurger("蝦肉漢堡");
}
void buildFries(){
meal->setFries("小份薯?xiàng)l");
}
void buildDrink(){
meal->setDrink("大杯芬達(dá)");
}
};
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();
}
到了這里,關(guān)于(十四)Head first design patterns建造者模式(c++)的文章就介紹完了。如果您還想了解更多內(nèi)容,請(qǐng)?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!