Помогите пожалуйста разобраться. Есть приложение, которое создает пиццу с произвольным набором компонентов. Приложение написано при помощи паттерна декоратор. Как реализовать возможность подсчета общей стоимости пиццы? Вроде похоже на то, что это не сложно, но не соображу с чего начать.
Так и где приложение?)
#include<iostream>
using namespace std;
class Pizza
{
public:
virtual double bill() = 0;
virtual ~Pizza() = default;
};
class SmallPizza:public Pizza
{
double price1 = 0;
public:
double getSmallPizzaPrice()const
{
return price1;
}
void setSmallPizzaPrice(double _price1)
{
price1 = _price1;
}
double bill()override
{
cout << price1 << endl;
}
};
class MediumPizza:public Pizza
{
double price2 = 0;
public:
double getMediumPizzaPrice()const
{
return price2;
}
void setMediumPizzaPrice(double _price2)
{
price2 = _price2;
}
};
class Decorator:public Pizza
{
protected:
Pizza* component = nullptr;
public:
Decorator(Pizza* component)
{
this->component = component;
}
~Decorator()override
{
delete component;
}
};
class WithCheese: public Decorator
{
double price3 = 0;
public:
WithCheese(Pizza* c) :Decorator(c)
{
}
};
class WithOlives: public Decorator
{
double price4 = 0;
public:
WithOlives(Pizza* c) :Decorator(c)
{
}
};
class WithSalami: public Decorator
{
double price5 = 0;
public:
WithSalami(Pizza* c) :Decorator(c)
{
}
};
int main()
{
}
Ну я его начал делать, точнее сказать. Но не могу понять как реализовать подсчет общей суммы?)
Тут вместо cout, естественно return price. Не пойму, как это потом в кучу собрать?
А про пиццу какая задача была? Тут что-то странное и непонятно для чего декоратор нужен был.
Вот условие. Задачу нужно реализовать при помощи паттерна Декоратор.
Спроектировать приложение, которое позволяет создавать пиццу с произвольным
количеством ингредиентов. Предусмотреть два вида основ для пиццы(например
маленькая и средняя) а так же, как минимум, три вида ингредиентов. Реализовать
возможность подсчета общей стоимости пиццы со всеми включенными
ингредиентами.
Я так понимаю нужно сделать метод, в котором будет вестись подсчет ингредиентов. Этот метод должен возвращать значение суммы. Как реализовать все таким образом, чтобы при добавлении ингредиента, он прибавлялся бы к сумме уже существующих?
Тогда это можно сделать почти прямо как в примере по ссылке выше.
В базовом классе/интерфейсе сделать функцию типа getPrice
, в SmallPizza
и MediumPizza
возвращать оттуда какое-то число.
Тут примерно так и есть, только не надо отдельные функции цен у каждого класса. И вместо setPrice
можно в конструкторе цену принимать или вообще просто константа.
А для ингредиентов создать декораторы и там в getPrice
:
return price + pizza.getPrice();
где price
— цена ингредиента.
и в main:
Pizza* pizza;
if (pizzaSize == "small") {
pizza = new SmallPizza();
} else {
pizza = new MediumPizza();
}
if (olives) {
pizza = new OlivePizzaDecorator(pizza);
}
if (salami) {
pizza = new SalamiPizzaDecorator(pizza);
}