1.定义
定义一个工厂类,通过工厂类来生成需要的对象.
2.代码实现
以pizza为例子,需要不同的披萨,比如: 芝士披萨,花甲披萨,意式香肠披萨,蔬菜披萨.
定义一个抽象类Pizza
public abstract class Pizza { public void prepare() {} public void bake() {} public void cut() {} public void box() {} }
定义抽象类Pizza的子类,四种披萨
public class CheesePizza extends Pizza { }
public class ClamPizza extends Pizza { }
public class PepperoniPizza extends Pizza { }
public class VeggiePizza extends Pizza { }
定义一个工厂类,专门负责生成pizza
public class SimplePizzaFactory { /** * 根据传入的参数生成具体的类型 * @param type 类型 * @return 根据类型生成的pizza对象 */ public Pizza createPizza(String type) { Pizza pizza = null; if (type.equals("cheess")) { pizza = new CheesePizza(); } else if (type.equals("pepperoni")) { pizza = new PepperoniPizza(); } else if (type.equals("veggie")) { pizza = new VeggiePizza(); } else if (type.equals("clam")) { pizza = new ClamPizza(); } return pizza; } }
接下来就是定义披萨商店
public class PizzaStore { SimplePizzaFactory factory; public PizzaStore(SimplePizzaFactory factory) { super(); this.factory = factory; } public Pizza orderPizza(String type) { Pizza pizza; pizza = factory.createPizza(type); pizza.prepare(); pizza.bake(); pizza.cut(); pizza.box(); return pizza; } }
可以看到在构造函数中传入之前定义的工厂类,来生成具体的pizza类型,加工后返回给客户
3.总结
简单工厂只是定义了一个工厂类,把创建过程封装到这个类中,如果需要生成别的种类的pizza的话还需要定义许多披萨工厂,并且改变传入的披萨工厂类型.
而且为了获取正确的类型还需要知道传入的是什么披萨工厂,会多增加一层判断,增加代码的复杂程度....