Мне нужно реализовать шаблон оформления пиццы (американский и неаполитанский) с 4 разными начинками (салями, суджук, лук, перец), который расширяет класс «TopingDecorator», и из них 3 будут добавлены в пиццу командой «Добавить пиццу». Однако код не добавляет его в ArrayList TopingDecorator Pizza. Это должно быть что-то вроде ниже (я пытаюсь добавить Салями и Суджук в пиццу AmericanPan (которая расширяет класс PlainPizza)):
AmericanPan a = new American();
Salami s = new Salami(a);
Soudjouk so = new Soudjouk(s);
Вот мой класс PlainPizza:
public class PlainPizza implements Pizza{
private int cost;
private String name;
private int orderID;
List<ToppingDecorator> topingsOfPizza;
public PlainPizza(int orderID){
this.orderID = orderID;
topingsOfPizza = new ArrayList<ToppingDecorator>();
}
public void addPizza(PlainPizza p) {
Pizza.allPizzas.add(p);
}
public List<ToppingDecorator> getTopingsOfPizza() {
return topingsOfPizza;
}
@Override
public int cost() {
// TODO Auto-generated method stub
return cost;
}
public int getOrderID() {
return orderID;
}
public String getName() {
return name;
}
@Override
public void addTopping() {
}
А вот мой класс AmericanPan:
public class AmericanPan extends PlainPizza{
// Class Instances
private final int cost = 5;
private String name;
// Constructor
public AmericanPan(int orderID) {
super(orderID);
this.name = "AmericanPan";
}
// Get Cost
@Override
public int cost() {
return cost;
}
// Get Name
public String getName() {
return name;
}
Я пытаюсь добавить салями на американскую сковороду в классе салями:
public class Salami extends ToppingDecorator{
private String name;
ToppingDecorator t;
public Salami(PlainPizza pizza) {
super(pizza);
this.name = "salami";
this.addToping();
}
@Override
public int cost() {
return super.cost() + 3;
}
@Override
public void addTopping() {
t = new Salami(pizza);
pizza.topingsOfPizza.add(t);
}
И я пытаюсь добавить его с кодом ниже в моей функции в основном классе, который управляет всем процессом:
PlainPizza piz = new AmericanPan(orderID);
// Check The Toppings that Pizza contains
if(pizzatops.contains("soudjouk")){
soudjok = true;
}if(pizzatops.contains("salami")){
salami = true;
}if(pizzatops.contains("pepper")){
pepper = true;
}if(pizzatops.contains("onion")){
onion = true;
}
// Add Pizza according to Toppings
for(int g = 0;g<pizzatops.size();g++){
if(pizzatops.get(g).equals("salami")){
Salami s = new Salami(piz);
}else if(pizzatops.get(g).equals("pepper")){
Pepper p = new Pepper(piz);
}else if(pizzatops.get(g).equals("soudjouk")){
Soudjouk p = new Soudjouk(piz);
}
else if(pizzatops.get(g).equals("onion")){
Onion o = new Onion(piz);
}
}
Pizza.allPizzas.add(piz);
System.out.println("AmericanPan pizza added to order " + orderID);