Skip to content

Instantly share code, notes, and snippets.

@m1irka
Created March 27, 2026 06:38
Show Gist options
  • Select an option

  • Save m1irka/50fbf88ba04e85d90690d4507e838e85 to your computer and use it in GitHub Desktop.

Select an option

Save m1irka/50fbf88ba04e85d90690d4507e838e85 to your computer and use it in GitHub Desktop.
Builder car
#include <iostream>
#include <string>
using namespace std;
class Car {
string name;
string body;
int engineHP;
int wheelsR;
string transmission;
public:
void SetName(string n) { name = n; }
void SetBody(string b) { body = b; }
void SetEngine(int hp) { engineHP = hp; }
void SetWheels(int r) { wheelsR = r; }
void SetTransmission(string t) { transmission = t; }
void ShowCar() {
cout << "Car: " << name
<< " | Body: " << body
<< " | Engine: " << engineHP << " HP"
<< " | Wheels: R" << wheelsR
<< " | Transmission: " << transmission << "\n";
}
};
class CarBuilder {
protected:
Car car;
public:
Car GetCar() { return car; }
virtual void BuildName() = 0;
virtual void BuildBody() = 0;
virtual void BuildEngine() = 0;
virtual void BuildWheels() = 0;
virtual void BuildTransmission() = 0;
};
class LanosBuilder : public CarBuilder {
public:
void BuildName() override { car.SetName("Daewoo Lanos"); }
void BuildBody() override { car.SetBody("Sedan"); }
void BuildEngine() override { car.SetEngine(98); }
void BuildWheels() override { car.SetWheels(13); }
void BuildTransmission() override { car.SetTransmission("5 Manual"); }
};
class ProbeBuilder : public CarBuilder {
public:
void BuildName() override { car.SetName("Ford Probe"); }
void BuildBody() override { car.SetBody("Coupe"); }
void BuildEngine() override { car.SetEngine(160); }
void BuildWheels() override { car.SetWheels(14); }
void BuildTransmission() override { car.SetTransmission("4 Auto"); }
};
class PatriotBuilder : public CarBuilder {
public:
void BuildName() override { car.SetName("UAZ Patriot"); }
void BuildBody() override { car.SetBody("Universal"); }
void BuildEngine() override { car.SetEngine(120); }
void BuildWheels() override { car.SetWheels(16); }
void BuildTransmission() override { car.SetTransmission("4 Manual"); }
};
class GetzBuilder : public CarBuilder {
public:
void BuildName() override { car.SetName("Hyundai Getz"); }
void BuildBody() override { car.SetBody("Hatchback"); }
void BuildEngine() override { car.SetEngine(66); }
void BuildWheels() override { car.SetWheels(13); }
void BuildTransmission() override { car.SetTransmission("4 Auto"); }
};
class Shop {
CarBuilder* builder;
public:
void SetBuilder(CarBuilder* b) { builder = b; }
Car GetCar() { return builder->GetCar(); }
void ConstructCar() {
builder->BuildName();
builder->BuildBody();
builder->BuildEngine();
builder->BuildWheels();
builder->BuildTransmission();
}
};
void client(CarBuilder* builder) {
Shop shop;
shop.SetBuilder(builder);
shop.ConstructCar();
Car car = shop.GetCar();
car.ShowCar();
}
int main() {
CarBuilder* builder = new LanosBuilder();
client(builder);
delete builder;
builder = new ProbeBuilder();
client(builder);
delete builder;
builder = new PatriotBuilder();
client(builder);
delete builder;
builder = new GetzBuilder();
client(builder);
delete builder;
system("pause");
return 0;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment