考虑以下产品和维基百科的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} }}?
什么是最优雅的解决方案,以避免违反模式?这种模式对我来说是新的。
答案 0 :(得分:1)
createNewPizzaProduct
不必关心Pizza
类是否实现特定方法:它的唯一责任是实例化Pizza
。如果您正在询问如何处理基于某些标准创建不同Pizza实现的可能性,那么您将需要查看 Factory模式。