【发布时间】:2016-04-11 11:20:27
【问题描述】:
根据 Head First 设计模式,在 Factory 类中声明静态方法的缺点 - “您不能子类化并更改 getPizza 方法的行为”。工厂类使用 getPizza 方法来决定返回哪种类型的对象。如果我理解正确的话,我的课是
public class PizzaFactory {
public static Pizza getPizza(String type) {
if (type.equals("cheese"))
return new CheesePizza();
else if (type.equalsIgnoreCase("thisCrust"))
return new ThinCrustPizza();
return null;
}
}
即使方法是静态的,我也总是可以创建一个子类,例如 -
public class DelhiPizzaFactory extends PizzaFactory {
public static Pizza getPizza(String type) {
if (type.equals("cheese"))
return new CheesePizza();
else if (type.equalsIgnoreCase("thisCrust"))
return new ThinCrustPizza();
return null;
}
}
我可以互换使用超类和子类。
public class PizzaStore {
Pizza pizza;
public void orderPizza(String type) {
pizza = DelhiPizzaFactory.getPizza(type);
pizza.prepare();
pizza.bake();
}
}
那么有什么缺点呢?
【问题讨论】:
-
必须是
final才能停止覆盖
标签: java design-patterns factory-pattern