抽象工厂是创建型设计模式,它强调了一系列相关产品对象(属于同一个产品族)的创建过程,它和工厂方法模式的侧重点不同,工厂方法模式更加侧重于同一产品等级,而抽象工厂模式侧重的是同一产品族。简单说就是一个工厂中生产的一系列对象都是同一个产品族的。
还是用冰箱来举例,美的生产的产品有美的冰箱、美的空调、美的电风扇。
为了更好的学习抽象工厂模式先来了解下产品等级和产品族,相同的产品等级就是相同的产品,像美的冰箱、格力冰箱、海尔冰箱,它们都是冰箱,它们的产品等级都相同,虽然厂家不同。美的冰箱、美的空调和美电风扇,他们虽然不是同一个产品等级的,但是他们都来自同一家厂商美的,因此他们的产品族相同。
在这个工厂里面生产的所有产品对象都不是同一个产品等级的,它们属于同一个产品族,该工厂生产的一系列对象都是相关的。就像定义说的:抽象工厂模式提供一个创建一系列相关或相互依赖对象的接口。如果现在我们希望生产海尔的一系列产品就可以扩展抽象产品接口创建一系列海尔产品类,创建海尔的工厂负责生产海尔的产品。想生产格力的只需要进行扩展对应的产品和工厂就好了,从这点看完全遵循开闭原则。不过抽象工厂模式的不足也很明显,如果美的现在又搞洗衣机了,就需要修改接口和所有的实现类,因此对于扩展一个新的产品等级来说,不遵循开闭原则。