代码非原创,如有侵权,请联系删除。仅做参考理解使用.
/*******************************************************************************
* 建造者模式.
* 时间:2020/5/7
* 作者:xhome
******************************************************************************/
#include <iostream>
using namespace std;
class House {
public:
void setFloor(const string &mFloor) {
m_floor = mFloor;
}
void setWall(const string &mWall) {
m_wall = mWall;
}
void setDoor(const string &mDoor) {
m_door = mDoor;
}
const string &getFloor() const {
return m_floor;
}
const string &getWall() const {
return m_wall;
}
const string &getDoor() const {
return m_door;
}
private:
string m_floor;
string m_wall;
string m_door;
};
//建造者类
class Builder {
public:
virtual void makeFloor()=0;
virtual void makeWall()=0;
virtual void makeDoor()=0;
virtual House * getHouse()=0;
};
//造公寓的类
class FlatBuilder: public Builder {
public:
FlatBuilder()
{
pHouse = new House;
}
virtual void makeFloor()
{
pHouse->setFloor("flat floor");
}
virtual void makeWall()
{
pHouse->setWall("flat wall");
}
virtual void makeDoor()
{
pHouse->setDoor("flat door");
}
virtual House * getHouse()
{
return pHouse;
}
private:
House * pHouse;
};
//造别墅的类
class VillaBuild: public Builder {
public:
VillaBuild()
{
pHouse = new House;
}
virtual void makeFloor()
{
pHouse->setFloor("villa floor");
}
virtual void makeWall()
{
pHouse->setWall("villa wall");
}
virtual void makeDoor()
{
pHouse->setDoor("villa door");
}
virtual House * getHouse()
{
return pHouse;
}
private:
House * pHouse;
};
//设计师,负责设计过程.
class Director
{
public:
Director(Builder * build)
{
m_build = build;
}
void Construct()
{
m_build->makeWall();
m_build->makeFloor();
m_build->makeDoor();
}
private:
Builder * m_build;
};
int main() {
House * house;
Builder * builder;
Director * director;
//别墅工程队
builder = new VillaBuild;
//1.创建设计师
director = new Director(builder);
director->Construct();
house = builder->getHouse();
cout <<" " << house->getWall() << " , "<< house->getDoor()<< " , "<< house->getFloor() << endl;
delete builder;
delete director;
delete house;
//建造公寓工程队
builder = new FlatBuilder;
//1.创建设计师
director = new Director(builder);
director->Construct();
house = builder->getHouse();
cout <<" " << house->getWall() << " , "<< house->getDoor()<< " , "<< house->getFloor() << endl;
delete builder;
delete director;
delete house;
//也可以自己造房子,这样适合小作坊,不适合流水线.
// house = new House;
return 0;
}