建造者模式就是将一个复杂对象的构造与它的表示分离,对于相同的建造过程,不同的建造者会得到不同的建造结果。
建造者的建造过程各个部分都是单独完成的。
建造者定义建造的步骤和接口。
具体建造者实现建造的步骤和接口,并完成产品的建造。
指导者决定使用哪一个建造者来建造,完成自己所需的产品。
建造者基类接口
#ifndef CBuildBaseH
#define CBuildBaseH
#include<iostream>
#include"CProduct.h"
using namespace std;
class CBuildBase
{
public:
virtual ~CBuildBase(){};
virtual void BuildDrink()=0;
virtual void BuildFood()=0;
virtual void BuildCocalate()=0;
virtual CProduct GetProduct()=0;
protected:
CBuildBase(){};
CProduct m_CProduct;
};
#endif具体建造者A
#include"CBuildBase.h"
class CConcreateA:public CBuildBase
{
public:
CConcreateA(){};
~CConcreateA(){};
void BuildDrink(){m_CProduct.m_sDrink = "可口可乐";}
void BuildFood(){m_CProduct.m_sFood = "汉堡";}
void BuildCocalate(){m_CProduct.m_sCocalate = "法式巧克力";}
CProduct GetProduct(){return m_CProduct;};
private:
};具体建造者B
#include"CBuildBase.h"
class CConcreateB:public CBuildBase
{
public:
CConcreateB(){};
~CConcreateB(){};
void BuildDrink(){m_CProduct.m_sDrink = "橙汁";}
void BuildFood(){m_CProduct.m_sFood = "炒米饭";}
void BuildCocalate(){m_CProduct.m_sCocalate = "意大利风味巧克力";}
CProduct GetProduct(){return m_CProduct;};
private:
};指导者
#include"CBuildBase.h"
class CDirecter
{
public:
CDirecter(){};
~CDirecter(){};
CProduct Construct(CBuildBase *pCBuildBase)
{
pCBuildBase->BuildDrink();
pCBuildBase->BuildFood();
pCBuildBase->BuildCocalate();
return pCBuildBase->GetProduct();
}
};产品
#ifndef CProductH
#define CProductH
#include<iostream>
#include<string>
using namespace std;
class CProduct
{
public:
CProduct(){};
~CProduct(){};
void GetProduct()
{
cout<<"you select "<<m_sDrink<<" "<<m_sFood<<" "<<m_sCocalate<<endl;
}
void SetDrink(const string &sDrink)
{
m_sDrink = sDrink;
}
void SetFood(const string &sFood)
{
m_sFood = sFood;
}
void SetCocalate(const string &sCocalate)
{
m_sCocalate = sCocalate;
}
string m_sDrink;
string m_sFood;
string m_sCocalate;
};
#endif主函数
#include "CDirecter.h"
#include "ContreadBuilderA.h"
#include "ContreadBuilderB.h"
int main()
{
CDirecter *pCDirecter = new CDirecter();
CConcreateA *pBuilderA = new CConcreateA();
CProduct tProduct;
tProduct = pCDirecter->Construct(pBuilderA);
tProduct.GetProduct();
CConcreateB *pBuilderB = new CConcreateB();
tProduct = pCDirecter->Construct(pBuilderB);
tProduct.GetProduct();
char c= getchar();
c = getchar();
return 0;
}本文出自 “风清扬song” 博客,请务必保留此出处http://2309998.blog.51cto.com/2299998/1388668
原文:http://2309998.blog.51cto.com/2299998/1388668