Une différence frappante entre Builder et Factory que je pouvais distinguer était la suivante
supposons que nous ayons une voiture
class Car
{
bool HasGPS;
bool IsCityCar;
bool IsSportsCar;
int Cylenders;
int Seats;
public:
void Car(bool hasGPs=false,bool IsCityCar=false,bool IsSportsCar=false, int Cylender=2, int Seats=4);
};
Dans l'interface ci-dessus, nous pouvons obtenir la voiture de la manière suivante:
int main()
{
BadCar = new Car(false,false,true,4,4);
}
mais si, une exception se produit lors de la création des sièges ??? VOUS N'OBTIENDREZ PAS DU TOUT L'OBJET // MAIS
supposons que vous ayez une implémentation comme celle-ci
class Car
{
bool mHasGPS;
bool mIsCityCar;
bool mIsSportsCar;
int mCylenders;
int mSeats;
public:
void Car() : mHasGPs(false), mIsCityCar(false), mIsSportsCar(false), mCylender(2), mSeats(4) {}
void SetGPS(bool hasGPs=false) {mHasGPs = hasGPs;}
void SetCity(bool CityCar) {mIsCityCar = CityCar;}
void SetSports(bool SportsCar) {mIsSportsCar = SportsCar;}
void SetCylender(int Cylender) {mCylenders = Cylender;}
void SetSeats(int seat) {mSeats = seat;}
};
class CarBuilder
{
Car* mCar;
public:
CarBuilder():mCar(NULL) { mCar* = new Car(); }
~CarBuilder() { if(mCar) { delete mCar; }
Car* GetCar() { return mCar; mCar=new Car(); }
CarBuilder* SetSeats(int n) { mCar->SetSeats(n); return this; }
CarBuilder* SetCylender(int n) { mCar->SetCylender(n); return this; }
CarBuilder* SetSports(bool val) { mCar->SetSports(val); return this; }
CarBuilder* SetCity(bool val) { mCar->SetCity(val); return this; }
CarBuilder* SetGPS(bool val) { mCar->SetGPS(val); return this; }
}
Vous pouvez maintenant créer comme ça
int main()
{
CarBuilder* bp =new CarBuilder;
Car* NewCar = bp->SetSeats(4)->SetSports(4)->SetCity(ture)->SetGPS(false)->SetSports(true)->GetCar();
bp->SetSeats(2);
bp->SetSports(4);
bp->SetCity(ture);
bp->SetSports(true)
Car* Car_II= bp->GetCar();
}
Ici, dans le deuxième cas, même si une opération échoue, vous obtiendrez toujours la voiture.
Peut-être que la voiture ne fonctionne pas parfaitement plus tard, mais vous auriez l'objet.
Parce que la méthode d'usine vous donne la voiture en un seul appel, tandis que le constructeur construit un par un.
Bien que cela dépende des besoins du digne pour lequel aller.