工厂模式会随着产品的增多而增多,这样会增加系统的复杂度,对此,是不是可以将某些位于不同产品等级结构中,功能相关联的产品归为同一类进而有同一个工厂进行生产,对于这些同类的产品称之为产品族。
抽象工厂:与系统业务逻辑无关,只负责定义接口
具体工厂:实现抽象工厂的接口,与系统业务逻辑息息相关,负责创建对象
抽象产品:定义产品族的共性
具体产品:实现抽象产品的共性,根据自身需求添加产品特性
优点:
(1)分离了具体的类。客户通过抽象接口操纵实例,产品的类名也在具体工厂的实现中被分离,它们不出现在客户代码中。[3]
(2)易于交换产品系列。一个具体工厂类只在初始化时出现一次,这使得改变一个应用的具体工厂变得很容易,只需改变具体的工厂即可使用不同的产品配置。 [3]
(3)有利于产品的一致性。当一个系列的产品对象被设计成一起工作时,一个应用一次只能使用同一个系列中的对象,这一点很重要,而抽象工厂很容易实现这一点。 [3]
缺点:难以支持新种类的产品。因为抽象工厂接口确定了可以被创建的产品集合,所以难以扩展抽象工厂以生产新种类的产品。