Reliable - trochę więcej buildera
This commit is contained in:
parent
145b2001f2
commit
6bb7c5050d
4 changed files with 56 additions and 51 deletions
|
|
@ -1,18 +0,0 @@
|
||||||
#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;
|
|
||||||
};
|
|
||||||
|
|
@ -0,0 +1,28 @@
|
||||||
|
#pragma once
|
||||||
|
|
||||||
|
#include <Ship/Cargo.h>
|
||||||
|
|
||||||
|
#include <memory>
|
||||||
|
|
||||||
|
class CargoFactory {
|
||||||
|
public:
|
||||||
|
CargoFactory();
|
||||||
|
|
||||||
|
[[nodiscard]] virtual std::unique_ptr<Cargo> create(const std::string &name, int amount);
|
||||||
|
|
||||||
|
CargoFactory& setName(const std::string& name);
|
||||||
|
CargoFactory& setAmount(int amount);
|
||||||
|
|
||||||
|
private:
|
||||||
|
std::unique_ptr<Cargo> _cargo;
|
||||||
|
};
|
||||||
|
|
||||||
|
class ItemFactory : public CargoFactory {
|
||||||
|
[[nodiscard]] std::unique_ptr<Cargo> create(const std::string &name, int amount);
|
||||||
|
};
|
||||||
|
class AlcoholFactory : public CargoFactory {
|
||||||
|
[[nodiscard]] std::unique_ptr<Cargo> create(const std::string &name, int amount);
|
||||||
|
};
|
||||||
|
class FruitFactory : public CargoFactory {
|
||||||
|
[[nodiscard]] std::unique_ptr<Cargo> create(const std::string &name, int amount);
|
||||||
|
};
|
||||||
|
|
@ -1,33 +0,0 @@
|
||||||
#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;
|
|
||||||
}
|
|
||||||
|
|
@ -0,0 +1,28 @@
|
||||||
|
#include "Ship/CargoFactory.h"
|
||||||
|
|
||||||
|
#include <Core/PrettyPrintVisitor.h>
|
||||||
|
#include <iostream>
|
||||||
|
|
||||||
|
|
||||||
|
CargoFactory::CargoFactory()
|
||||||
|
: _cargo(std::make_unique<Cargo>()) {
|
||||||
|
}
|
||||||
|
|
||||||
|
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<Cargo> ItemFactory::create(const std::string &name, int amount) override {
|
||||||
|
return std::unique_move(_cargo);
|
||||||
|
|
||||||
|
}
|
||||||
|
[[nodiscard]] std::unique_ptr<Cargo> AlcoholFactory::create(const std::string &name, int amount) override {
|
||||||
|
return std::unique_move(_cargo);
|
||||||
|
}
|
||||||
|
[[nodiscard]] std::unique_ptr<Cargo> FruitFactory::create(const std::string &name, int amount) override {
|
||||||
|
return std::unique_move(_cargo);
|
||||||
|
}
|
||||||
Loading…
Reference in a new issue