
简单工厂模式由三类角色组成:
pulic class PizzaStore{//添加工厂的引用SimplePizzaFactory factory;public PizzaStore(SimplePizzaFactory factory){this.factory = factory;}//披萨来自于工厂Pizza pizza = factory.createPizza(type);pizza.prepare();pizza.bake();pizza.cut();pizza.box();return pizza;
}
}
public class SimplePizzaFactory(){Pizza orderPizza(String type){Pizza pizza;if("cheese".equals(type)){pizza = new CheesePizza();}else if("greek".equals(type)){pizza = new GreekPizza;}return pizza;}
}
public class SimplePizzaFactory(){//静态方法static Pizza orderPizza(String type){Pizza pizza;if("cheese".equals(type)){pizza = new CheesePizza();}else if("greek".equals(type)){pizza = new GreekPizza;}return pizza;}
}
工厂方法模式:定义了一个创建对象的接口,但由子类决定要实例化的类是哪一个。工厂方法让类把实例化推迟到子类。



工厂方法模式由四类角色组成:
public abstract class Pizza {String name;String dough;String sauce;ArrayList toppings = new ArrayList();void prepare(){System.out.println("Preparing "+name);System.out.println("Tossing dough...");System.out.println("Adding sauce...");System.out.println("Adding toppings: ");for(int i = 0;i
public class ChicagoStyleCheesePizza extends Pizza {public ChicagoStyleCheesePizza(){name = "Chicago Style Deep Dish Cheese Pizza";dough = "Extra Thick Crust Dough";sauce = "Plum Tomato Sauce";toppings.add("Shredded Mozzarella Cheese");}@Overridevoid cut(){System.out.println("Cutting the pizza into square slices");}
}
public class NYStyleCheesePizza extends Pizza {public NYStyleCheesePizza(){name = "NY Style Sauce and Cheese Pizza";dough = "Thin Crest Dough";sauce = "Marinara Sauce";toppings.add("Grated Reggiano Cheese");}
}
public abstract class PizzaStore{public Pizza orderPizza(){Pizza pizza;pizza = createPizza(type);pizza.prepare();pizza.bake();pizza.cut();pizza.box();return pizza;}//现在把工厂对象移动到这个方法中abstract Pizza createPizza();
}
public class NYStylePizzaStore extends PizzaStore{@OverridePizza createPizza(){return new NYStyleCheesePizza();}
}
public class ChicagoStyleCheeseStore extends PizzaStore{@OverridePizza createPizza(){return new ChicagoStyleCheesePizza();}
}
//纽约风味
NYPizzaFactory nyFactory = new NYPizzaFactory();
PizzaStore nyStore = new PizzaStore(nyFactory);
nyStore.orderPizza();//芝加哥风味
ChicagoPizzaFactory chicagoFactory = new ChicagoPizzaFactory();
PizzaStore nyStore = new PizzaStore(chicagoFactory);
nyStore.orderPizza();