Builder模式所面对的情况是:各个部分的子对象用一定的算法构成;由于需求的变化,这个复杂对象的各个部分经常面临着剧烈的变化,但是将他们组合在一起的算法却相对稳定。
就像女娲造人一样,不管是早男人女人,胖人瘦人都是造头部,胳膊,身体,腿。具体是怎么制造的有女娲决定,但是这几个身体部位的组合是确定的。
#include <iostream>
using namespace std;
//人的基类
class Person
{
public:
virtual void buildHead()=0;
virtual void buildBody()=0;
virtual void buildArm()=0;
virtual void buildLeg()=0;
public:
virtual ~Person(){}
};
//胖人
class FatPerson:public Person
{
public:
void buildHead()
{
cout<<"制造胖人的头部"<<endl;
}
void buildBody()
{
cout<<"制造胖人的身体"<<endl;
}
void buildArm()
{
cout<<"制造胖人的胳膊"<<endl;
}
void buildLeg()
{
cout<<"制造胖人的腿"<<endl;
}
};
//瘦人
class ThinPerson:public Person
{
public:
void buildHead()
{
cout<<"制造瘦人的头部"<<endl;
}
void buildBody()
{
cout<<"制造瘦人的身体"<<endl;
}
void buildArm()
{
cout<<"制造瘦人的胳膊"<<endl;
}
void buildLeg()
{
cout<<"制造瘦人的腿"<<endl;
}
};
//执行组合过程
class Director
{
private:
Person* p;
Director(const Director&);
Director& operator=(const Director&);
public:
Director(Person *_p):p(_p){}
void reset(Person* _p){p=_p;}
void create()
{
p->buildHead();
p->buildBody();
p->buildArm();
p->buildLeg();
}
};
int main()
{
ThinPerson tp;
Director d(&tp);
d.create();
FatPerson fp;
d.reset(&fp);
d.create();
return 0;
}
![](https://img-my.csdn.net/uploads/201210/20/1350708402_5230.png)