{
printf("builderB by concretebuilder1\n");
}
void concretebuilder2::builderA()
{
printf("builderA by concretebuilder2\n");
}
void concretebuilder2::builderB()
{
printf("builderB by concretebuilder2\n");
}
director::director(builder *pbuilder)
{
this->pBuilder = pbuilder;
}
director::~director()
{
delete pBuilder;
pBuilder = NULL;
}
void director::construct()
{
//将同一个过程的表示组装一下
pBuilder->builderA();
pBuilder->builderB();
}
void main()
{
//调用时,需要注意一下,具体想创建哪个表示,就实例化哪个
builder *pbuilder1 = new concretebuilder1;
//通过导演,可以将表示提取出来
director *pdirector = new director(pbuilder1);
//具体操作,就可以由导演代劳了。
pdirector->construct();
builder *pbuilder2 = new concretebuilder2;
director *pdirector2 = new director(pbuilder2);
pdirector2->construct();
delete pdirector;
delete pdirector2;
}
分析代码的时候主要看类的结构关系,以及具体的使用方法。
下面让我们看一个具体的例子。
例子主要从http://www.cnblogs.com/wanggary/archive/2011/04/15/2017615.html,得来的,仅供学习使用。
carbuilder.h
/*
客户模型:
carmodel:汽车模型
benmodel:奔驰汽车
bmwmodel:宝马汽车
carbuilder:建造者接口
benbuilder:奔驰建造者
bmwbuilder:宝马建造者
director:导演
*/
#include
#include
#include
using namespace std;
//首先虚拟出一个汽车模型
class carmodel
{
public:
carmodel();
virtual ~carmodel();
void Run();
void SetSequence(vector
protected:
//定义出一系列操作
virtual void Start() = 0;
virtual void Stop() = 0;
virtual void Alarm() = 0;
virtual void EngineBoom() = 0;
private:
vector
};
//根据汽车模型构建奔驰汽车
class benmodel:public carmodel
{
public:
benmodel();
~benmodel();
protected:
void Start();
void Stop();
void Alarm();
void EngineBoom();
};
//根据汽车模型构建宝马汽车 www.2cto.com
class bmwmodel:public carmodel
{
public:
bmwmodel();
~bmwmodel();
protected:
void Start();
void Stop();
void Alarm();
void EngineBoom();
};
//虚拟出一个汽车的建造者模型
//类似于上面说的那个抽象基类
class carbuilder
{
public:
carbuilder()
{
}
virtual ~carbuilder()
{
}
virtual void SetSequence(vector
virtual carmodel* GetCarModel() = 0;
};
//创建一个奔驰汽车
class benbuilder:public carbuilder
{
public:
benbuilder();
~benbuilder();
void SetSequence(vector
carmodel* GetCarModel();
private:
carmodel *pBen;
};
//创建一个奔驰汽车
class bmwbuilder:public carbuilder
{
public:
bmwbuilder();
~bmwbuilder();
void SetSequence(vector
carmodel* GetCarModel();
private:
carmodel *pBmw;
};
//这个就是导演,
class director
{
public:
director();
~director();
benmodel* GetABenModel();
benmodel* GetBBenModel();
bmwmodel* GetCBmwModel();
bmwmodel* GetDBmwModel();
private:
vector
benbuilder *pBen;
bmwbuilder *pBmw;
};
/*
客户模型:
carmodel:汽车模型
benmodel:奔驰汽车
bmwmodel:宝马汽车
carbuilder:建造者接口
benbuilder:奔驰建造者
bmwbuilder:宝马建造者
director:导演
*/
#include
#include
#include
using namespace std;
//首先虚拟出一个汽车模型
class carmodel
{
public:
carmodel();
virtual ~carmodel();
void Run();
void SetSequence(vector
protected:
//定义出一系列操作
virtual void Start() = 0;
virtual void Stop() = 0;
virtual void Alarm() = 0;
virtual void EngineBoom() = 0;
private:
vector
};
//根据汽车模型构建奔驰汽车
class benmodel:public carmodel
{
public:
benmodel();
~benmodel();
protected:
void Start();
v