Прилагается классический шаблон Decorator. Мой вопрос заключается в том, как бы вы изменили приведенный ниже код, чтобы вы могли обернуть ноль или одну из каждой добавки в пиццу
Прямо сейчас у меня может быть Pepporini -> Колбаса -> Pepporini -> Пицца класса за общую стоимость до 10 долларов, взимая плату за Pepporini дважды.
Не думаю, что хочу использовать шаблон «Цепочка ответственности», поскольку порядок не имеет значения и не все начинки используются?
Спасибо
namespace PizzaDecorator
{
public interface IPizza
{
double CalculateCost();
}
public class Pizza: IPizza
{
public Pizza()
{
}
public double CalculateCost()
{
return 8.00;
}
}
public abstract class Topping : IPizza
{
protected IPizza _pizzaItem;
public Topping(IPizza pizzaItem)
{
this._pizzaItem = pizzaItem;
}
public abstract double CalculateCost();
}
public class Pepporini : Topping
{
public Pepporini(IPizza pizzaItem)
: base(pizzaItem)
{
}
public override double CalculateCost()
{
return this._pizzaItem.CalculateCost() + 0.50;
}
}
public class Sausage : Topping
{
public Sausage(IPizza pizzaItem)
: base(pizzaItem)
{
}
public override double CalculateCost()
{
return this._pizzaItem.CalculateCost() + 1.00;
}
}
public class Onions : Topping
{
public Onions(IPizza pizzaItem)
: base(pizzaItem)
{
}
public override double CalculateCost()
{
return this._pizzaItem.CalculateCost() + .25;
}
}
}