概念
此模式能够分步骤创建复杂对象(比如一个对象在对其进行构造时需要对诸多成员变量和嵌套对象进行繁复的初始化工作)。允许使用相同的创建代码生成不同类型和形式的对象。
具体操作
将对象构造代码从产品类中抽取出来,并将其放在一个名为生成器的独立对象中。将对象构造过程划分为一组步骤,每次创建对象时,都需要通过生成器对象执行一系列步骤。重点在于无需调用所有步骤,而只需调用创建特定对象配置所需的那些步骤即可。
使用场景
当发现要向构造函数传递大量参数而其中有些参数在某些时候又不是必须的时。
示例
struct Car
{
int seatsNumber;
QString engine;
bool GPS;
};
class Builder
{
public:
virtual void reset() = 0;
virtual void setSeats(int number) = 0;
virtual void setEngine(QString engine) = 0;
virtual void setGPS(bool GPS) = 0;
};
class CarBuilder : public Builder
{
public:
CarBuilder()
{
reset();
}
void reset()
{
car = new Car;
}
void setSeats(int number)
{
car->seatsNumber = number;
}
void setEngine(QString engine)
{
car->engine = engine;
}
void setGPS(bool GPS)
{
car->GPS = GPS;
}
Car *getCar()
{
Car * car = this->car;
reset();
return car;
}
private:
Car * car{nullptr};
};
int main(int argc, char *argv[])
{
CarBuilder carBuilder;
//创建一辆3个座位支持GPS的宇宙牌引擎的车
carBuilder.setSeats(3);
carBuilder.setGPS(true);
carBuilder.setEngine("宇宙牌");
Car * car = carBuilder.getCar();
//创建一辆100个座位不支持GPS的无引擎的车
carBuilder.setSeats(100);
carBuilder.setGPS(false);
car = carBuilder.getCar();
}