Создавать разные декорированные объекты в случае ввода - PullRequest
0 голосов
/ 08 мая 2020

Предположим, что я использовал узорчатый дизайн для приготовления пиццы. Пользователь может добавить в пиццу 3 типа ингредиентов. Моцарелла, соус и овощи. Я подготовил эти занятия и установил стоимость. Это основной код

public class PizzaFactory {
    public static void main(String[] args) {
        Pizza p = new TomatoSauce(new Mozarella(new PlainPizza())); 
        System.out.println(p.getIngredients());
    }
}

Это интерфейс

public interface Pizza {
    public String getIngredients();
    public int getCost();
}

Это базовая пицца

public class PlainPizza implements Pizza{
    @Override
    public String getIngredients() {
        return "Pizza ";
    }
    @Override
    public int getCost() {
        return 5;
    }
}

Это класс декоратора

abstract class IngredientDecorator implements Pizza{
    protected Pizza tempPizza;

    public IngredientDecorator(Pizza newPizza) {
        this.tempPizza = newPizza;
    }
    public String getIngredients() {
        return tempPizza.getIngredients();
    }
    public int getCost() {
        return tempPizza.getCost();
    }
}

Один из классов ингредиентов:

public class Mozarella extends IngredientDecorator{
    public Mozarella(Pizza newPizza) {
        super(newPizza);
    }

    public String getIngredients() {
        return tempPizza.getIngredients() + " Mozarella";
    }

    public int getCost() {
        return tempPizza.getCost() + 1;
    }
}

Остальные похожи на них. Теперь я хочу получить информацию от пользователя о том, какой ингредиент он хочет. Для ввода создам пиццу. Они могут захотеть просто пиццу. Но так как я создаю свою пиццу -> Pizza p = new TomatoSauce (new Mozarella (new PlainPizza ())); как это. Как создать пиццу динами c? Должен ли я проверять каждое условие с помощью if-else или switch-case?

...