Reliable - zalążek buildera

This commit is contained in:
Sasza Stanczew 2024-05-07 11:27:39 +02:00
parent 18bdf44313
commit 145b2001f2
3 changed files with 56 additions and 5 deletions

View file

@ -25,12 +25,12 @@ int main() {
auto ship = ShipBuilder() auto ship = ShipBuilder()
.setTime(&time) .setTime(&time)
.setName("Black Widow") .setName("Black Widow")
.setCapacity(1000) .setCapacity(2000)
.setCrew(40) .setCrew(20)
.setStrategy(std::make_unique<ShipHardDifficultLvlStrategy>()) .setStrategy(std::make_unique<ShipHardDifficultLvlStrategy>())
.setVisitor(std::make_unique<PrettyPrintVisitor>()) .setVisitor(std::make_unique<PrettyPrintVisitor>())
.setArmor(100) .setArmor(1500)
.setDurability(1000) .setDurability(1500)
.build(); .build();
ship->load(std::make_unique<Alcohol>(300)); ship->load(std::make_unique<Alcohol>(300));
ship->load(std::make_unique<Fruit>(200)); ship->load(std::make_unique<Fruit>(200));
@ -39,7 +39,7 @@ int main() {
Enemy enemy("Enemy1", Enemy enemy("Enemy1",
ShipJsonBuilder("../ships.json").buildGaleon(&time, "Queens Anne revenge"), ShipJsonBuilder("../ships.json").buildGaleon(&time, "Queens Anne revenge"),
std::make_unique<EnemyHardDifficultLvlStrategy>(), std::make_unique<EnemyEasyDifficultLvlStrategy>(),
CargoDamageVisitor{}); CargoDamageVisitor{});
BattleField battefield{&user, &enemy}; BattleField battefield{&user, &enemy};

View file

@ -0,0 +1,18 @@
#pragma once
#include <Ship/Cargo.h>
#include <memory>
class CargoBuilder {
public:
CargoBuilder();
[[nodiscard]] std::unique_ptr<Cargo> build();
CargoBuilder& setName(const std::string& name);
CargoBuilder& setAmount(int amount);
private:
std::unique_ptr<Cargo> _cargo;
};

View file

@ -0,0 +1,33 @@
#include "Ship/CargoBuilder.h"
#include <Core/PrettyPrintVisitor.h>
#include <iostream>
CargoBuilder::CargoBuilder()
: _cargo(std::make_unique<Cargo>()) {
}
std::unique_ptr<Cargo> 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;
}