抽象工厂模式是一种常见的设计模式,它是工厂方法模式的扩展,它提供了一种方式,用于创建一系列彼此有关联或依赖的对象,而无需指定它们的具体类。在这个模式中,有多个角色组合起来参与创建对象,本文将从多个角度进行分析。
一、抽象工厂模式的角色
1. 抽象工厂(AbstractFactory):
抽象工厂是一个接口,它规定了具体工厂必须实现的方法,这些方法用来创建一系列相关的产品。
2. 具体工厂(ConcreteFactory):
具体工厂是抽象工厂的实现类,它实现了抽象工厂中定义的方法,用来创建一系列相关的产品。
3. 抽象产品(AbstractProduct):
抽象产品是一个接口或抽象类,它规定了具体产品必须实现的方法,这些方法用来完成具体产品的功能。
4. 具体产品(ConcreteProduct):
具体产品是抽象产品的实现类,它实现了抽象产品中定义的方法,完成具体产品的功能。
二、抽象工厂模式的角色组合
1. 单一产品族的抽象工厂模式:
如笔记本电脑厂商,它只生产笔记本电脑,但对于不同系列的笔记本电脑,其硬件配置、外部设计等可能不同。在这种场景下,抽象工厂模式的角色组合为:一个抽象工厂、多个具体工厂、一个抽象产品、多个具体产品。其中,抽象工厂中的方法用于创建不同系列的笔记本电脑,如联想(具体工厂)创建ThinkPad(具体产品)系列的笔记本电脑、YOGA(具体产品)系列的笔记本电脑等。
2. 多个产品族的抽象工厂模式:
如家具厂商,它生产的产品包括沙发、床、书桌等,这些产品可能分属于不同的产品族,每个产品族都有各自不同的风格、材质等特点。在这种场景下,抽象工厂模式的角色组合为:一个抽象工厂、多个具体工厂、多个抽象产品、多个具体产品。其中,抽象工厂中的方法用于创建不同产品族的家具,如北欧家具(具体工厂)创建北欧沙发(具体产品)、北欧床(具体产品)、北欧书桌(具体产品)等;而美式家具(具体工厂)则创建美式沙发(具体产品)、美式床(具体产品)、美式书桌(具体产品)等。
三、抽象工厂模式的优点
1. 可以确保客户端创建的产品都是相互关联或依赖的。如产品A和产品B是相关的,那么它们所属的产品族应该是一致的。抽象工厂模式可以确保客户端只使用同一产品族中的产品。
2. 抽象工厂模式将产品的实现和客户端代码分离,客户端无需关心具体产品的实现细节。
3. 当需要增加新的产品族时,只需增加新的具体工厂和具体产品即可。
扫码咨询 领取资料