创建型模式之抽象工厂模式(AbstractFactory Pattern)C++实现******
抽象工厂模式(AbstractFactory Pattern)创建型模式.
定义:提供一个接口,用于创建相关或依赖对象的家族,而不需要明确指定具体类。
工厂方法潜伏在抽象工厂里面,抽象工厂的方法经常以工厂方法的方式实现。抽象工厂的任务就是定义一个负责创建一组产品的接口。这个接口内的每一个方法都负责创建一个具体的产品,同时我们利用实现抽象工厂的子类来提供这些具体的做法。
Factory模式仅仅局限于一类类(所有的类有一个共同的基类),如果要为不同类的类提供一个对象创建的接口,需要采用抽象工厂模式。
AbstractFactory模式关键就是将这一组对象的创建封装到一个用于创建对象的类(ConcreteFactory)中,维护这样一个创建类总比维护n多相关对象的创建过程要简单的多。
区别:抽象工厂和工厂方法都是负责创建对象,但是工厂方法用的是继承。抽象工厂采用的是对象的组合。
抽象工厂是用来创建一个产品家族的抽象类型,这个类型的子类定义了产品被产生的方法。它把一群相关的产品集合起来。所有的工厂模式都通过减少应用程序和具体类之间的依赖促进松耦合。抽象工厂创建相关的对象家族,而不需要依赖它们的具体类。
例子:HeadFirst中Pizza店根据地区的不同选择生成Pizza的原料,如面团,酱料等,所以它们是一个个类。它们的实例化需要放到一个工厂去管理创建。需要用的时候问工厂要就可以了。抽象原料工厂定义了如何产生一个相关产品的家族。这个家族包含了所有的原料。
抽象工厂的类图:
对应的Pizza店的类图:
实际上,AbstractFactory模式是为创建一组(有多类)相关或依赖的对象提供创建接口,而Factory模式正如我在相应的文档中分析的是为一类对象提供创建接口或延迟对象的创建到子类中实现。并且可以看到,AbstractFactory模式通常都是使用Factory模式实现
HeadFirst中Pizza店 抽象工厂C++实现:
Product.h头文件: