工厂模型3——抽象模型
想一下,如果pizza的加盟店用一些低廉的原料,这显然要砸了店里的招牌,所以要想办法让加盟店没办法改变原料。
public class NYPizzaStore extends PizzaStore{ @Override protected Pizza createPizza(String type) { // TODO Auto-generated method stub Pizza pizza = null; PizzaIngredientFactory factory = new NYPizzaIngredientFactory(); if(type.equals("Cheese")){ pizza = new CheesePizza(factory); } return pizza; } }
public class CheesePizza extends Pizza{ PizzaIngredientFactory ingredientFactory; public CheesePizza(PizzaIngredientFactory ingredientFactory) { this.ingredientFactory = ingredientFactory; } @Override public void prepare() { // TODO Auto-generated method stub sauce = ingredientFactory.createSauce(); cheese = ingredientFactory.createCheese(); } }
这样,加盟店NYPizzaStore就不能擅自在prepare方法中改变原料。
由此可见:抽象工厂模式提供一个接口,用于创建相关或依赖对象的家族,而不需要明确指定具体类
抽象工厂使用对象组合,对象的创建被实现在工厂接口所暴露出来的方法中。