建造者模式也成为Builder模式或者生成器模式。建造者模式是一种对象创建型模式,用来隐藏复合对象的创建过程,它把复合对象的创建过程加以抽象,可以通过子类继承和重载的方式动态地创建具有复合属性的对象。
建造者模式的作用是将一个复杂对象的构建与它的表示分离,使的同样的构建过程可以创建不同的表示。
#include<iostream>
using namespace std;
class House
{
private:
string Wall;
string Window;
string Door;
public:
void SetWall(string w) //创建墙
{
Wall=w;
}
void SetWindow(string o) //创建窗户
{
Window=o;
}
void SetDoor(string d) //创建门
{
Door=d;
}
string GetWall() //获得墙
{
return Wall;
}
string GetWindow() //获得窗户
{
return Window;
}
string GetDoor() //获得门
{
return Door;
}
};
class Builder
{
protected:
House *house;
public:
virtual void Constructor()=0;
virtual House *GetHouse()=0;
};
class CommonBuilder : public Builder //创建普通房子
{
public:
CommonBuilder()
{
house=new House;
}
void Constructor()
{
house->SetDoor("COMMONDoor");
house->SetWall("COMMONWall");
house->SetWindow("COMMONWindow");
}
House *GetHouse()
{
return house;
}
};
class VillaBuilder : public Builder //创建别墅
{
public:
VillaBuilder()
{
house=new House;
}
void Constructor()
{
house->SetDoor("VILLADoor");
house->SetWall("VILLAWall");
house->SetWindow("VILLAWindow");
}
House *GetHouse()
{
return house;
}
};
class Designer
{
private:
Builder *builder;
public:
Designer(Builder *b)
{
builder=b;
}
void Constructor()
{
builder->Constructor();
}
};
int main()
{
Designer *designer=NULL;
House *house;
Builder *common=new CommonBuilder;
designer=new Designer(common);
designer->Constructor();
house=common->GetHouse();
cout << house->GetDoor() << endl;
cout << house->GetWall() << endl;
cout << house->GetWindow() << endl;
return 0;
}
工厂模式与建造者模式的不同点:
同样是创建对象,工厂模式和建造者模式的区别在于工厂模式不考虑对象的组装过程,直接生成一个想要的对象,建造者模式先一个个的创建对象的每一个部件,再统一组装成一个对象。
工厂模式所解决的问题是工厂生产产品,而建造者模式所解决的问题是工厂控制产品生产器组装各个部件的过程,然后从产品生成器中得到产品。