要依赖抽象,不要依赖具体类
工厂方法模式定义了一个创建对象的接口(这里并不特指接口,通常说针对接口编程,更接近于针对超类(父类)编程,而超类型通常是接口或者是一个抽象类),但由子类决定要实例化的类是哪一个。工厂方法让类把实例化推迟到子类。
public abstract class Pizza {
String name;
String dough;
String sauce;
ArrayList toppings = new ArrayList();
void prepare() {
// balabala
}
void bake() {
// balabala
}
void cut() {
// balabala
}
void box() {
// balabala
}
public String getName() {
return name;
}
}
public abstract class PizzaStore {
public Pizza orderPizza(String type) {
Pizza pizza;
pizza = createPizza(type);
pizza.prepare();
pizza.bake();
pizza.cut();
pizza.box();
return pizza;
}
protected abstract Pizza createPizza(String type);
}
public class NYStyleCheesePizza extends Pizza {
public NYStyleCheesePizza() {
name = "NY Style Sauce and Cheese Pizza";
// ...
toppings.add("Grated Reggiano Cheese");
}
}
public class NYPizzaStore extends PizzaStore {
Pizza createPizza(String item) {
if (item.equals("cheese")) {
return new NYStyleCheesePizza();
}
// balabala...
}
// 如果需要的话,还可以重写Pizza里面的方法
void cut() {
System.out.println("把Pizza切成正方形");
}
}
PizzaStore nyPizzaStore = new NYPizzaStore();
nyPizzaStore.orderPizza("cheese");
网友评论