建造者模式
将产品的内部表象和产品的生产过程分割开来,从而使一个建造过程生成具有不同的内部表象的产品对象。建造者模式使得产品内部表象可以独立的变化,客户不必知道产品内部实现的细节。建造者模式可以强制实行一种分步骤进行的建造过程。
例子:一个房子(House)有门(Door)和墙(Wall),建造者(Builder)在建造屋子的时候需要造门和墙,但是我们并不需要知道如何建造门和墙、我们只需要派遣建造者去造屋子就可以了,不同的建造者自己就会建造出不同的屋子。我们通过设计者(Designer)选择不同的建造者,直接造出屋子,并不需要知道具体的内部实现过程。
#include <iostream>
using namespace std;
class House
{
private:
string m_Wall;
string m_Door;
public:
void set_wall(string w)
{
m_Wall = w;
}
void set_door(string d)
{
m_Door = d;
}
string get_wall()
{
return m_Wall;
}
string get_door()
{
return m_Door;
}
};
class Builder
{
protected:
House *house;
public:
virtual void Constructor() = 0;
virtual House *get_house() = 0;
virtual void builder_wall(string w) = 0;
virtual void builder_door(string d) = 0;
};
class CommonBuilder : public Builder
{
public:
CommonBuilder()
{
house = new House;
}
void Constructor()
{
builder_wall("COMMONWALL");
builder_door("COMMOONDOOR");
}
House *get_house()
{
return house;
}
private:
void builder_wall(string w)
{
house -> set_wall(w);
}
void builder_door(string d)
{
house -> set_door(d);
}
};
class VillaBuilder : public Builder
{
public:
VillaBuilder()
{
house = new House;
}
void Constructor()
{
builder_wall("VILLAWALL");
builder_door("VILLADOOR");
}
House *get_house()
{
return house;
}
private:
void builder_wall(string w)
{
house -> set_wall(w);
}
void builder_door(string d)
{
house -> set_door(d);
}
};
class Designer
{
private:
Builder *builder;
public:
void set_builder(Builder *b)
{
builder = b;
}
void Constructor()
{
builder -> Constructor();
}
};
int main(int argc, char **argv)
{
House *house = NULL;
Builder *builder = NULL;
Designer *designer = new Designer;
builder = new CommonBuilder;
designer -> set_builder(builder);
designer -> Constructor();
house = builder -> get_house();
cout << house -> get_wall() << endl;
cout << house -> get_door() << endl;
return 0;
}