模式定义:
将一个复杂对象的构建与其表示相分离,使得同样的构建过程(稳定)可以创建不同的表示(变化)。
该模式和模板方法模式很相似,但是这里使用的地方是在类初始化的过程中。
例如我们要造一个房子,那么很有可能造房子的步骤是稳定的(例如先打地基,然后修墙,然后修窗户等等),但是怎么打地基,怎么修墙这些具体步骤可能会有变化,所以我们可以这样设计,将房子类的初始化分几个类来实现:
House
类:
class House{
//....
};
建造房子的HouseBuilder
类:
class HouseBuilder {
public:
House* GetResult(){
return pHouse;
}
virtual ~HouseBuilder(){}
protected:
House* pHouse;
virtual void BuildPart1()=0;
virtual void BuildPart2()=0;
virtual void BuildPart3()=0;
virtual void BuildPart4()=0;
virtual void BuildPart5()=0;
};
石头房子类:
class StoneHouse: public House{
};
建造石头房子类:
class StoneHouseBuilder: public HouseBuilder{
protected:
virtual void BuildPart1(){
//pHouse->Part1 = ...;
}
virtual void BuildPart2(){
}
virtual void BuildPart3(){
}
virtual void BuildPart4(){
}
virtual void BuildPart5(){
}
};
具体实现类步骤的组合(也可以直接放在Builder中):
class HouseDirector{
public:
HouseBuilder* pHouseBuilder;
HouseDirector(HouseBuilder* pHouseBuilder){
this->pHouseBuilder=pHouseBuilder;
}
House* Construct(){
pHouseBuilder->BuildPart1();
for (int i = 0; i < 4; i++){
pHouseBuilder->BuildPart2();
}
bool flag=pHouseBuilder->BuildPart3();
if(flag){
pHouseBuilder->BuildPart4();
}
pHouseBuilder->BuildPart5();
return pHouseBuilder->GetResult();
}
};