From 145b2001f2b2ccc22c7787152cdefb6f3fa8a65e Mon Sep 17 00:00:00 2001 From: Sasza Stanczew Date: Tue, 7 May 2024 11:27:39 +0200 Subject: [PATCH] =?UTF-8?q?Reliable=20-=20zal=C4=85=C5=BCek=20buildera?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Presentation/exercises/builder/main.cpp | 10 +++--- .../src/Ship/include/Ship/CargoBuilder.h | 18 ++++++++++ .../builder/src/Ship/src/CargoBuilder.cpp | 33 +++++++++++++++++++ 3 files changed, 56 insertions(+), 5 deletions(-) create mode 100644 CreatingReliableSoftwareCpp/Presentation/exercises/builder/src/Ship/include/Ship/CargoBuilder.h create mode 100644 CreatingReliableSoftwareCpp/Presentation/exercises/builder/src/Ship/src/CargoBuilder.cpp 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; +}