工厂模式将具体的产品的构造过程放在了工厂类中实现
例如一个电脑零件生产的工厂,可以生产主板和内存,具体生产那个类型通过工厂类中的逻辑判断控制;简单工厂将产品的构造过程从对象中拿了出来,随着工厂规模的增大,产品种类越来越多,例如后面又要生产显示器,显卡等等,导致工厂中判断生产产品的方法越来越复杂,即判断生产主板还是生产内存的逻辑都在工厂类中。因此衍生出了工厂方法模式
工厂方法模式为每个产品创建一个工厂,因此就不需要将所有产品的创建方法都写在一个工厂类中,具体需要生产哪类产品时只需要拿到对应产品的工厂去创建即可。但是随着工厂规模进一步增大,该工厂开始生产不同厂商的配件,例如最早生产的是惠普的配件,后面又开始产联系的配件了,这就导致工厂类的数量成倍数的增加,如下图所示
因此为了减少工厂类的数量,将有规律的同一组相关的产品的生产放到一个工厂中,就形成了抽象工厂的模式如下图所示,将惠普系列的产品生产放到惠普的工厂中,联系系统的产品生产放到联想的工厂中。抽象工厂模式对于增加一个系列的产品扩张非常方便,例如增加一个戴尔系列,只需要增加一个戴尔的工厂进行扩展即可;缺点是如果要增加一个产品非常麻烦,例如要生产显卡,则所有的系列都需要扩展重写显卡的生产方法。