Created
March 27, 2026 06:38
-
-
Save m1irka/50fbf88ba04e85d90690d4507e838e85 to your computer and use it in GitHub Desktop.
Builder car
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
| #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