⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 builder.h

📁 对设计模式中的factory, 代理等进行了实现。
💻 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 + -