diff --git a/CreatingReliableSoftwareCpp/Presentation/exercises/builder/main.cpp b/CreatingReliableSoftwareCpp/Presentation/exercises/builder/main.cpp index 2609baf..b5a4c60 100644 --- a/CreatingReliableSoftwareCpp/Presentation/exercises/builder/main.cpp +++ b/CreatingReliableSoftwareCpp/Presentation/exercises/builder/main.cpp @@ -25,12 +25,12 @@ int main() { auto ship = ShipBuilder() .setTime(&time) .setName("Black Widow") - .setCapacity(1000) - .setCrew(40) + .setCapacity(2000) + .setCrew(20) .setStrategy(std::make_unique()) .setVisitor(std::make_unique()) - .setArmor(100) - .setDurability(1000) + .setArmor(1500) + .setDurability(1500) .build(); ship->load(std::make_unique(300)); ship->load(std::make_unique(200)); @@ -39,7 +39,7 @@ int main() { Enemy enemy("Enemy1", ShipJsonBuilder("../ships.json").buildGaleon(&time, "Queens Anne revenge"), - std::make_unique(), + std::make_unique(), CargoDamageVisitor{}); BattleField battefield{&user, &enemy}; diff --git a/CreatingReliableSoftwareCpp/Presentation/exercises/builder/src/Ship/include/Ship/CargoBuilder.h b/CreatingReliableSoftwareCpp/Presentation/exercises/builder/src/Ship/include/Ship/CargoBuilder.h new file mode 100644 index 0000000..1990aee --- /dev/null +++ b/CreatingReliableSoftwareCpp/Presentation/exercises/builder/src/Ship/include/Ship/CargoBuilder.h @@ -0,0 +1,18 @@ +#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/src/CargoBuilder.cpp b/CreatingReliableSoftwareCpp/Presentation/exercises/builder/src/Ship/src/CargoBuilder.cpp new file mode 100644 index 0000000..1ff3ffc --- /dev/null +++ b/CreatingReliableSoftwareCpp/Presentation/exercises/builder/src/Ship/src/CargoBuilder.cpp @@ -0,0 +1,33 @@ +#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; +}