📄 builder.h
字号:
#ifndef BUILDER_1B484D05_EEE6_4c67_8124_8D5E74DF1971_H
#define BUILDER_1B484D05_EEE6_4c67_8124_8D5E74DF1971_H
/*
* File Name:
*
* Reference:
*
* Author:Qingwei Wang
*
* Description:
* Builder pattern : separate the construction of a complex object from its representation
* so that the same construction process can create different representations
*
* History:
* 2007-Aug-9th Created
*
*
*
*CodeReview Log:
*
*/
#include <iostream>
#include <string>
#include <memory>
void UseBuilder();
//Product
class Pizza
{
std::string m_strDough;
std::string m_strSauce;
std::string m_strToppoing;
public:
Pizza(){}
void SetDough(const std::string& d){m_strDough=d;}
void SetSauce(const std::string& s){m_strSauce=s;}
void SetTopping(const std::string& t){m_strToppoing=t;}
void ShowPizza()
{
std::cout<<"Pizza with Dough"<<m_strDough
<<"\n Sauce as"<<m_strSauce
<<"\n Topping as"<<m_strToppoing<<"!\n";
}
};
//AbstractBuilder
class PizzaBuilder
{
protected:
std::auto_ptr<Pizza> m_pPizza;
public:
PizzaBuilder(){}
~PizzaBuilder(){}
std::auto_ptr<Pizza> GetPizza(){ return m_pPizza;}
void CreateNewPizzaProduct(){ m_pPizza=std::auto_ptr<Pizza>(new Pizza());}
virtual void BuildDough()=0;
virtual void BuildSauce()=0;
virtual void BuildTopping()=0;
};
//ConcreteBuilder
class HawaiianPizzaBuilder:public PizzaBuilder
{
void BuildDough(){m_pPizza->SetDough("Dough");}
void BuildSauce(){m_pPizza->SetSauce("mild"); }
void BuildTopping(){m_pPizza->SetTopping("ham and pineapple");}
};
//ConcreteBuilder
class SpicyPizzaBuilder:public PizzaBuilder
{
void BuildDough(){m_pPizza->SetDough("pan baked");}
void BuildSauce(){m_pPizza->SetSauce("hot");}
void BuildTopping(){m_pPizza->SetTopping("pepperoni and salami");}
};
//Director
class Waiter
{
PizzaBuilder* m_pPizzaBuilder;
public:
Waiter():m_pPizzaBuilder(0){}
~Waiter(){}
void SetPizzaBuilder(PizzaBuilder* b){m_pPizzaBuilder=b;}
std::auto_ptr<Pizza> GetPizza()
{return m_pPizzaBuilder->GetPizza();}
void ConstructPizza()
{
m_pPizzaBuilder->CreateNewPizzaProduct();
m_pPizzaBuilder->BuildDough();
m_pPizzaBuilder->BuildSauce();
m_pPizzaBuilder->BuildTopping();
}
};
#endif//BUILDER_1B484D05_EEE6_4c67_8124_8D5E74DF1971_H
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -