Created
March 25, 2026 20:53
-
-
Save vlaleli/c5a5b1401da9020f95e3a8179eea1223 to your computer and use it in GitHub Desktop.
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> | |
| #include <vector> | |
| #include <memory> | |
| #include <iomanip> | |
| using namespace std; | |
| class Car { | |
| private: | |
| string name; | |
| string body; | |
| int enginePower; | |
| int wheelRadius; | |
| string transmission; | |
| public: | |
| void setName(const string& v) { name = v; } | |
| void setBody(const string& v) { body = v; } | |
| void setEnginePower(int v) { enginePower = v; } | |
| void setWheelRadius(int v) { wheelRadius = v; } | |
| void setTransmission(const string& v) { transmission = v; } | |
| void show() const { | |
| cout << left | |
| << setw(18) << name | |
| << setw(15) << body | |
| << setw(15) << enginePower | |
| << setw(15) << wheelRadius | |
| << setw(15) << transmission | |
| << endl; | |
| } | |
| }; | |
| class CarBuilder { | |
| protected: | |
| Car* car; | |
| public: | |
| virtual ~CarBuilder() {} | |
| void createCar() { | |
| car = new Car(); | |
| } | |
| virtual void buildName() = 0; | |
| virtual void buildBody() = 0; | |
| virtual void buildEngine() = 0; | |
| virtual void buildWheels() = 0; | |
| virtual void buildTransmission() = 0; | |
| Car* getCar() { | |
| return car; | |
| } | |
| }; | |
| class DaewooLanosBuilder : public CarBuilder { | |
| public: | |
| void buildName() override { car->setName("Daewoo Lanos"); } | |
| void buildBody() override { car->setBody("Седан"); } | |
| void buildEngine() override { car->setEnginePower(98); } | |
| void buildWheels() override { car->setWheelRadius(13); } | |
| void buildTransmission() override { car->setTransmission("5 Manual"); } | |
| }; | |
| class FordProbeBuilder : public CarBuilder { | |
| public: | |
| void buildName() override { car->setName("Ford Probe"); } | |
| void buildBody() override { car->setBody("Купе"); } | |
| void buildEngine() override { car->setEnginePower(160); } | |
| void buildWheels() override { car->setWheelRadius(14); } | |
| void buildTransmission() override { car->setTransmission("4 Auto"); } | |
| }; | |
| class UAZPatriotBuilder : public CarBuilder { | |
| public: | |
| void buildName() override { car->setName("UAZ Patriot"); } | |
| void buildBody() override { car->setBody("Универсал"); } | |
| void buildEngine() override { car->setEnginePower(120); } | |
| void buildWheels() override { car->setWheelRadius(16); } | |
| void buildTransmission() override { car->setTransmission("4 Manual"); } | |
| }; | |
| class HyundaiGetzBuilder : public CarBuilder { | |
| public: | |
| void buildName() override { car->setName("Hyundai Getz"); } | |
| void buildBody() override { car->setBody("Хетчбэк"); } | |
| void buildEngine() override { car->setEnginePower(66); } | |
| void buildWheels() override { car->setWheelRadius(13); } | |
| void buildTransmission() override { car->setTransmission("4 Auto"); } | |
| }; | |
| class Shop { | |
| public: | |
| Car* construct(CarBuilder& builder) { | |
| builder.createCar(); | |
| builder.buildName(); | |
| builder.buildBody(); | |
| builder.buildEngine(); | |
| builder.buildWheels(); | |
| builder.buildTransmission(); | |
| return builder.getCar(); | |
| } | |
| }; | |
| void printLine() { | |
| cout << setfill('-') << setw(78) << "-" << setfill(' ') << endl; | |
| } | |
| void printHeader() { | |
| printLine(); | |
| cout << left | |
| << setw(18) << "Имя" | |
| << setw(15) << "Корпус" | |
| << setw(15) << "Двигатель" | |
| << setw(15) << "Колеса" | |
| << setw(15) << "КПП" | |
| << endl; | |
| printLine(); | |
| } | |
| int main() { | |
| Shop shop; | |
| DaewooLanosBuilder b1; | |
| FordProbeBuilder b2; | |
| UAZPatriotBuilder b3; | |
| HyundaiGetzBuilder b4; | |
| vector<Car*> cars; | |
| cars.push_back(shop.construct(b1)); | |
| cars.push_back(shop.construct(b2)); | |
| cars.push_back(shop.construct(b3)); | |
| cars.push_back(shop.construct(b4)); | |
| cout << "Сборка автомобилей (Builder)\n"; | |
| printHeader(); | |
| for (auto car : cars) { | |
| car->show(); | |
| } | |
| printLine(); | |
| for (auto car : cars) { | |
| delete car; | |
| } | |
| return 0; | |
| } |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment