diff --git a/CreatingReliableSoftwareCpp/Presentation/exercises/builder/src/Ship/include/Ship/CargoBuilder.h b/CreatingReliableSoftwareCpp/Presentation/exercises/builder/src/Ship/include/Ship/CargoBuilder.h deleted file mode 100644 index 1990aee..0000000 --- a/CreatingReliableSoftwareCpp/Presentation/exercises/builder/src/Ship/include/Ship/CargoBuilder.h +++ /dev/null @@ -1,18 +0,0 @@ -#pragma once - -#include - -#include - -class CargoBuilder { -public: - CargoBuilder(); - - [[nodiscard]] std::unique_ptr build(); - - CargoBuilder& setName(const std::string& name); - CargoBuilder& setAmount(int amount); - -private: - std::unique_ptr _cargo; -}; diff --git a/CreatingReliableSoftwareCpp/Presentation/exercises/builder/src/Ship/include/Ship/CargoFatory.h b/CreatingReliableSoftwareCpp/Presentation/exercises/builder/src/Ship/include/Ship/CargoFatory.h new file mode 100644 index 0000000..f025b38 --- /dev/null +++ b/CreatingReliableSoftwareCpp/Presentation/exercises/builder/src/Ship/include/Ship/CargoFatory.h @@ -0,0 +1,28 @@ +#pragma once + +#include + +#include + +class CargoFactory { +public: + CargoFactory(); + + [[nodiscard]] virtual std::unique_ptr create(const std::string &name, int amount); + + CargoFactory& setName(const std::string& name); + CargoFactory& setAmount(int amount); + +private: + std::unique_ptr _cargo; +}; + +class ItemFactory : public CargoFactory { + [[nodiscard]] std::unique_ptr create(const std::string &name, int amount); +}; +class AlcoholFactory : public CargoFactory { + [[nodiscard]] std::unique_ptr create(const std::string &name, int amount); +}; +class FruitFactory : public CargoFactory { + [[nodiscard]] std::unique_ptr create(const std::string &name, int amount); +}; diff --git a/CreatingReliableSoftwareCpp/Presentation/exercises/builder/src/Ship/src/CargoBuilder.cpp b/CreatingReliableSoftwareCpp/Presentation/exercises/builder/src/Ship/src/CargoBuilder.cpp deleted file mode 100644 index 1ff3ffc..0000000 --- a/CreatingReliableSoftwareCpp/Presentation/exercises/builder/src/Ship/src/CargoBuilder.cpp +++ /dev/null @@ -1,33 +0,0 @@ -#include "Ship/CargoBuilder.h" - -#include -#include - -CargoBuilder::CargoBuilder() - : _cargo(std::make_unique()) { -} - -std::unique_ptr CargoBuilder::build() { - if (!_cargo) { - std::cout << "Builder may be use once\n"; - return nullptr; - } - - // Check mandatory fields - if (_cargo->_name.empty() || _cargo->_amount == -1) { - std::cout << "Mandatory fields are not set!\n"; - return nullptr; - } - - _cargo->initialize(); - return std::move(_cargo); -} - -CargoBuilder& CargoBuilder::setName(const std::string& name) { - _cargo->_name = name; - return *this; -} -CargoBuilder& CargoBuilder::setamount(int amount) { - _cargo->_amount = amount; - return *this; -} diff --git a/CreatingReliableSoftwareCpp/Presentation/exercises/builder/src/Ship/src/CargoFactory.cpp b/CreatingReliableSoftwareCpp/Presentation/exercises/builder/src/Ship/src/CargoFactory.cpp new file mode 100644 index 0000000..fb1fe12 --- /dev/null +++ b/CreatingReliableSoftwareCpp/Presentation/exercises/builder/src/Ship/src/CargoFactory.cpp @@ -0,0 +1,28 @@ +#include "Ship/CargoFactory.h" + +#include +#include + + +CargoFactory::CargoFactory() + : _cargo(std::make_unique()) { +} + +CargoFactory& CargoFactory::setName(const std::string& name) { + _cargo->_name = name; + return *this; +} +CargoFactory& CargoFactory::setamount(int amount) { + _cargo->_amount = amount; + return *this; +} +[[nodiscard]] std::unique_ptr ItemFactory::create(const std::string &name, int amount) override { + return std::unique_move(_cargo); + +} +[[nodiscard]] std::unique_ptr AlcoholFactory::create(const std::string &name, int amount) override { + return std::unique_move(_cargo); +} +[[nodiscard]] std::unique_ptr FruitFactory::create(const std::string &name, int amount) override { + return std::unique_move(_cargo); +}