Шаблон Builder для создания экземпляра класса, который может иметь разные типы - PullRequest
1 голос
/ 09 августа 2011

Рассмотрим следующий продукт и AbstractBuilder из Википедии:

/** "Product" */
class Pizza {
        private String dough = "";
        private String sauce = "";
        private String topping = "";

        public void setDough(String dough) {
                this.dough = dough;
        }

        public void setSauce(String sauce) {
                this.sauce = sauce;
        }

        public void setTopping(String topping) {
                this.topping = topping;
        }
}

/** "Abstract Builder" */
abstract class PizzaBuilder {
        protected Pizza pizza;

        public Pizza getPizza() {
                return pizza;
        }

        public void createNewPizzaProduct() {
                pizza = new Pizza();
        }

        public abstract void buildDough();

        public abstract void buildSauce();

        public abstract void buildTopping();
}

Если вы видите метод createNewPizzaProduct в классе PizzaBuilder.

Если бы Pizza реализовал интерфейс, скажем Foo, и должен был реализовать метод bar, как бы метод createNewPizzaProduct объяснил это, поскольку было бы много различных типов Pizza?

Что было бы наиболее элегантным решением, чтобы образец не нарушался? Эта модель является новой для меня.

1 Ответ

1 голос
/ 09 августа 2011

createNewPizzaProduct не нужно заботиться о том, реализует ли класс Pizza определенные методы: его единственная обязанность заключается в создании экземпляра Pizza.Если вы спрашиваете, как бы вы справились с возможностью создания различных реализаций Pizza на основе какого-либо критерия, вам нужно рассмотреть шаблон Factory .

.
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...