什么是工厂模式
工厂模式:简单的工厂模式,就是把对象的创建提出来单独处理。而标准的工厂模式,定义了一个创建对象的接口,但由子类决定要实例化的类是哪一个。工厂方法让类把实例化推迟到子类。
抽象工厂模式:提供一个接口,用于创建相关或依赖对象的家族,而不需要明确确定具体类。
工厂方法
简单的工厂方法,常用于组织创建同一类对象的不同子类。
例如,抽象类Pizza有很多种具体的实现子类,将创建一个Pizza对象的所有方法抽出,放到一个PizzaFactory中,通过不同的type实现创建不同的具体对象。这样可以将具体实现与使用分离。可以更好的管理Pizza的创建工作。
class PizzaFactory {
public static Pizza createPizza(String type) {
Pizza pizza = null;
if ("cheese".equals(type)) {
pizza = new CheesePizza();
} else if ("clam".equals(type)) {
pizza = new ClamPizza();
}
return pizza;
}
}
标准工厂方法模式,将对象的创建抽出到子类,父类不关心对象具体是哪一种,只关心对象的通用行为和方法,和创建方式。
public abstract class PizzaStore {
protected abstract Pizza createPizza(String type);
public Pizza orderPizza(String type) {
Pizza pizza = createPizza(type);
pizza.prepare();
pizza.bake();
pizza.cut();
return pizza;
}
}
如上所示,父类是一个抽象的构造Pizza(产品)的方法,具体创建Pizza的类型由子类实现createPizza()方法。
工厂模式的优点是,将创建对象的公共代码抽出接口来,这样可以将对具体实现的依赖改为对接口的依赖,代码会更有弹性,易于进行修改扩展等维护。
工厂模式还实现了依赖倒置原则,如果按照没有模式的方式写代码,Pizza的应用方会依赖Pizza的实现方,用工厂模式后,Pizza的应用方和Pizza的实现方都依赖createPizza()方法所在的抽象层。