创建型模式:抽象工厂模式
引入概念:
1、产品等级结构:当抽象的产品由具体的工厂生产出不同的产品时,这些归属与同一类的抽象产品就构成了产品等级结构;
2、产品族:具体的工厂可以生产出来的不同产品就构成了一个产品族。
抽象工厂模式中的具体工厂不只是创建一种产品,它将负责创建一族产品;每一个具体工厂都提供了多个工厂方法用于生产多种不同类型的产品,这些产品构成了一个产品族.
在抽象工厂模式结构图中包含了4个角色。
(1)、AbstractFactory(抽象工厂):它声明了一组用于创建一族产品的方法,每一个方法都对应一种产品;
(2)、ConcreteFactory(具体工厂):它实现了在抽象工厂中声明的创建产品的方法,生成一组具体产品,这些产品构成了一个产品族,每一个产品都位于某个产品等级结构中;
(3)、AbstractProduct(抽象产品):它为每种产品声明接口,在抽象产品中声明了产品所具有的业务方法;
(4)、ConcreteProduct(具体产品):它定义具体工厂生产的具体产品对象,实现在抽象产品接口中声明的业务方法;
抽象工厂模式最大的缺点是:在抽象工厂模式中,增加新的产品族很方便,但是增加新的产品等级结构很麻烦。对于增加新的产品等级结构,需要修改所有的工厂角色,包括抽象工厂类,在所有的工厂类中都需要增加生产新产品的方法,严重违背了开闭原则。
优点:
1、抽象工厂模式隔离了具体类的生成,客户无需知道什么被创建,所有的具体工厂都实现了抽象工厂中声明的公共接口;
2、当一个产品族中的多个对象被设计成一起工作时,它能保证客户端始终只使用同一个产品族中对象。
3、增加新的产品族时很方便,无须修改已有系统,符合开闭原则。