Compare commits
No commits in common. "149deafdb111c94713544a3f4db5a8d8d0f37961" and "58a01eb6807b78bf0bc2486fda6878ac780f46b4" have entirely different histories.
149deafdb1
...
58a01eb680
|
@ -1,21 +0,0 @@
|
||||||
cmake_minimum_required(VERSION 3.20)
|
|
||||||
|
|
||||||
project(
|
|
||||||
AbstractFactory
|
|
||||||
VERSION 0.1.0
|
|
||||||
LANGUAGES CXX)
|
|
||||||
|
|
||||||
list(APPEND CMAKE_MODULE_PATH "${PROJECT_SOURCE_DIR}/../cmake")
|
|
||||||
|
|
||||||
include(ExportCompileCommands)
|
|
||||||
include(sccache)
|
|
||||||
|
|
||||||
add_executable(AbstractFactory main.cpp)
|
|
||||||
|
|
||||||
target_compile_features(AbstractFactory PUBLIC cxx_std_20)
|
|
||||||
|
|
||||||
set_target_properties(
|
|
||||||
AbstractFactory
|
|
||||||
PROPERTIES ARCHIVE_OUTPUT_DIRECTORY "${PROJECT_SOURCE_DIR}/bin"
|
|
||||||
RUNTIME_OUTPUT_DIRECTORY "${PROJECT_SOURCE_DIR}/bin"
|
|
||||||
RUNTIME_OUTPUT_DIRECTORY "${PROJECT_SOURCE_DIR}/bin")
|
|
|
@ -1,4 +0,0 @@
|
||||||
#!/usr/bin/env sh
|
|
||||||
|
|
||||||
cmake -S . -B .build -G Ninja -D CMAKE_EXPORT_COMPILE_COMMANDS=ON
|
|
||||||
ln -s .build/compile_commands.json
|
|
|
@ -1,3 +0,0 @@
|
||||||
#!/usr/bin/env sh
|
|
||||||
|
|
||||||
cmake --build .build
|
|
|
@ -1,64 +0,0 @@
|
||||||
#include <iostream>
|
|
||||||
#include <memory>
|
|
||||||
|
|
||||||
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<Truck>(SportsVehicleFactory().createTruck());
|
|
||||||
auto familyCar = std::unique_ptr<Car>(FamilyVehicleFactory().createCar());
|
|
||||||
|
|
||||||
std::cout << "I am a " << sportsTruck->type() << std::endl;
|
|
||||||
std::cout << "I am a " << familyCar->type() << std::endl;
|
|
||||||
|
|
||||||
return EXIT_SUCCESS;
|
|
||||||
}
|
|
Loading…
Reference in New Issue