From 149deafdb111c94713544a3f4db5a8d8d0f37961 Mon Sep 17 00:00:00 2001 From: Michael Mandl Date: Thu, 14 Mar 2024 14:27:11 +0100 Subject: [PATCH] feat: implement AbstractFactory --- AbstractFactory/main.cpp | 56 ++++++++++++++++++++++++++++++++++++++++ 1 file changed, 56 insertions(+) diff --git a/AbstractFactory/main.cpp b/AbstractFactory/main.cpp index a70cc6e..ad887b4 100644 --- a/AbstractFactory/main.cpp +++ b/AbstractFactory/main.cpp @@ -1,8 +1,64 @@ #include +#include + +class Car { +public: + virtual ~Car() = default; + virtual std::string type() const = 0; +}; + +class SportsCar : public Car { +public: + std::string type() const override { return "SportsCar"; } +}; +class FamilyCar : public Car { +public: + std::string type() const override { return "FamilyCar"; } +}; + +class Truck { +public: + virtual ~Truck() = default; + virtual std::string type() const = 0; +}; + +class SportsTruck : public Truck { +public: + std::string type() const override { return "SportsTruck"; } +}; +class FamilyTruck : public Truck { +public: + std::string type() const override { return "FamilyTruck"; } +}; + +class VehicleFactory { +public: + virtual Car *createCar() const = 0; + virtual Truck *createTruck() const = 0; +}; + +class SportsVehicleFactory : public VehicleFactory { +public: + Car *createCar() const override { return new SportsCar; } + Truck *createTruck() const override { return new SportsTruck; } +}; + +class FamilyVehicleFactory : public VehicleFactory { +public: + Car *createCar() const override { return new FamilyCar; } + Truck *createTruck() const override { return new FamilyTruck; } +}; int main(int argc, char *argv[]) { std::cout << "AbstractFactory" << std::endl; + auto sportsTruck = + std::unique_ptr(SportsVehicleFactory().createTruck()); + auto familyCar = std::unique_ptr(FamilyVehicleFactory().createCar()); + + std::cout << "I am a " << sportsTruck->type() << std::endl; + std::cout << "I am a " << familyCar->type() << std::endl; + return EXIT_SUCCESS; }