和工厂模式解决的问题的不同之处是,抽象工厂创建的是一系列相互依赖的对象。
比如连接数据库、生成查询语句、执行语句三个接口,对于不同的数据库类型,要生成不同的子类。因为是面向接口的编程,所以在主框架中不能出现new,所以想到工厂模式,对于每个接口都要创建相关的工厂类,在工厂类中创建子类的对象,但这三个类是相互依赖的,如果是访问mysql数据库,那么三个都得生成mysql相关的类,如果其中一个与别的不一样,就会出错。为了防止它们生成依赖不同数据库的类,就将它们的对象创建方法放在一个类的某一方法中一起创建。也就是将生成三个子类对象的三个工厂合为一个。
其中AbstractProductA与AbstractProductB对应相互依赖的一组接口,
ProductA2与ProductB2对应具体可能实现类,如sql相关的类。
AbstractFactory对应抽象工厂,用来生成AbstractProductA与AbstractProductB的对象,其实这里也使用了多态,其实是生成它们的子类ProductA2与ProductB2,当然也可能是ProductA1与ProductB1(可以看作对应orcle数据库的相关类)。
最近看的一篇博文,将简单工厂、工厂方法、抽象工厂的区别以及抽象工厂的改进写地不错:
https://blog.csdn.net/u012156116/article/details/80857255#commentBox