用于构造可以具有不同类型的类的实例的构建器模式

时间:2011-08-09 15:06:32

标签: java design-patterns

考虑以下产品和维基百科的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将如何解释这一点,因为会有许多不同类型的{{1} }}?

什么是最优雅的解决方案,以避免违反模式?这种模式对我来说是新的。

1 个答案:

答案 0 :(得分:1)

createNewPizzaProduct不必关心Pizza类是否实现特定方法:它的唯一责任是实例化Pizza。如果您正在询问如何处理基于某些标准创建不同Pizza实现的可能性,那么您将需要查看 Factory模式