简单工厂不是工厂模式,只是一种用法的习惯。
工厂方法模式:定义了一个创建对象的接口,但是由子类决定要实例化的类是哪一个。工厂方法让类把实例化推迟到子类。(可以说工厂方法是一个特殊的模板方法)
public abstract class PizzaStore{
public Pizza orderPizza(String type){
Pizza pizza;
pizza=createPizza(type);
pizza.pareare();
pizza.bake();
pizza.cut();
pizza.box();
return pizza;
}
protected abstract Pizza createPizza(Stirng type); //客户程序中关于超类的代码和子类对象创建代码解耦了
}
pizza的种类如果有很多的话,我们将它抽象化,把它设计成一个接口或者是一个抽象的类(使用依赖倒置原则将向下的依赖倒置成向上的依赖,pizza的子类依赖pizza)。
遵从OO设计中的指导方针:
变量不可以持有具体类的引用。
不要让类派生自具体类。
不要覆盖基类中已实现的方法。
当我们的pizza的工厂需要做的原料不相同该怎么办,那不我们为每种pizza的原料创建一种工厂。
我们可以为工厂定义一个接口,这个接口负责创建所有的原料:
public interface PizzaIngredienFactory{
public Dough createDough();
public Sauce createSauce();
public Cheese createCheese();
public Veggies[] createVeggies();
}
抽象工厂模式:提供一个接口,用于创建相关或依赖对象的家族,而不需要明确指定具体类。