1、工厂模式:定义了一组创建对象的接口,但是由子类决定要实例化的类是哪一个。工厂方法把类的实例化推迟到子类中。
现在考虑有PizzaStore有一些子类(加盟店),他们有可能对pizza的做法进行一些改良,即createPizza方法需要升级。工厂方法的做法是,在基类中建立一个形为abstract Product factoryMethod(String type) 的方法,作为工厂方法,负责创建对象,子类可以通过改写这一方法来改变创建对象的具体过程。
子类返回的Pizza类型的对象,父类可以拿来统一使用,不用关心具体的类型
2、抽象工厂模式:提供一个接口,用于创建一个对象家族,而无需指定具体类。
工厂方法只涉及到创建一个对象的情况,有时我们需要一族对象,比如书中的例子:原料家族。
制作pizza需要很多原料,每个都需要一个工厂方法。这时我们把所有涉及到创建对象的方法集合到一起成为一个接口。
使用者针对这个接口编程,而接口由具体的类来实现。这样一来我们可以根据情况把相应的实现此接口的类传递给使用者。