Я должен использовать шаблон Decorator, основанный на диаграмме UML.В зависимости от типа вводимой строки, я должен вернуть цену и описание.Проблема, с которой я сталкиваюсь, заключается в том, что в описании UML строго указывается, что функция цены не является виртуальной, и, кроме того, ее следует реализовывать только в интерфейсе Smoothy, как показано ниже в коде:
#include<iostream>
using namespace std;
class Smoothy{
int price;
public:
int getPrice(){
return price;
}
virtual ~Smoothy() = default;
virtual string description() = 0;
};
class BasicSmoothy: public Smoothy{
private:
string nume;
public:
BasicSmoothy(string n): nume(n){}
string description(){
return nume;
}
};
class SmoothyDecorator:public Smoothy{
private:
Smoothy *b;
public:
SmoothyDecorator(Smoothy* bb){
b = bb;
}
~SmoothyDecorator(){
delete b;
}
string description(){
return b->description();
}
};
class SmoothyWithCream:public SmoothyDecorator{
public:
SmoothyWithCream(Smoothy *b):SmoothyDecorator(b){
}
string description(){
return SmoothyDecorator::description() + " with Cream!";
}
};
class SmoothyWithCinnamon:public SmoothyDecorator{
public:
SmoothyWithCinnamon(Smoothy *b):SmoothyDecorator(b){
}
string description(){
return SmoothyDecorator::description() + " with Cinnamon!";
}
};
int main(){
Smoothy* b = new SmoothyWithCinnamon(new BasicSmoothy("Kiwi"));
cout<<b->description();
}
Я уверен, что мой код отражает шаблон Decorator (пожалуйста, дайте мне знать, если это не так), но я не уверен, как вернуть цену, основанную на строке.В дополнение к этому на диаграмме UML указано, что BasicSmoothy имеет два типа, с двумя конкретными ценами (киви 10 $, клубничный 12 $) и классы Derived каждый добавляют 2 $ и 3 $ к окончательной указанной цене.
Есть ли способ вернуть цену через функцию getPrice (), если она не виртуальна и не реализована в других классах?