定义
工厂模式定义了一个创建对象的接口,但由子类决定要实例的类是哪一个。工厂方法把类的实例化推迟到子类。
代码
public abstract class Pizza {
String name;
}
public class BeijingStyleHotPizza extends Pizza {
public BeijingStyleHotPizza() {
name="BeijingStyleHotPizza";
}
}
public class BeiJingstylePizza extends Pizza{
public BeiJingstylePizza() {
name="BeiJingstylePizza";
}
}
public abstract class PizzaStore {
public Pizza orderPizza(String type){
Pizza pizza;
pizza=crePizza(type);
return pizza;
}
protected abstract Pizza crePizza(String type);
}
public class BeijingPizzaStore extends PizzaStore{
@Override
protected Pizza crePizza(String type) {
if (type.equalsIgnoreCase("hot")) {
return new BeijingStyleHotPizza();
}else{
return new BeiJingstylePizza();
}
}
}
public class PizzaTest {
public static void main(String[] args) {
PizzaStore p1=new BeijingPizzaStore();
Pizza p=p1.orderPizza("hot");
System.out.println(p.name);
}
}
总结
通过上面的例子我们可以看,和简单的工厂方法不同的是,简单工厂把全部的事情在一个地方都处理完了,而工厂方法确实创建了一个框架,让子类考虑如何实现。简单方法不具备工厂方法的弹性,因为简答工厂方法不能变更正在创建的产品,