创建型设计模式: 抽象工厂模式(Abstract Factory Pattern)

创建型设计模式: 抽象工厂模式(Abstract Factory Pattern)

CSDN专栏: 设计模式(UML/23种模式)

抽象工厂模式(Abstract Factory Pattern)为创建一组相关或相互依赖的对象提供一个接口,而且无需指定他们的具体类。抽象工厂模式属于创建型模式,创建型模式包括FactoryMethod模式,Abstract Factory模式,Singleton模式,ProtoType模式和Builder模式。

模式简介

抽象工厂模式是工厂方法模式的升级版本,他用来创建一组相关或者相互依赖的对象。他与工厂方法模式的区别就在于,工厂方法模式针对的是一个产品等级结构;而抽象工厂模式则是针对的多个产品等级结构。在编程中,通常一个产品结构,表现为一个接口或者抽象类,也就是说,工厂方法模式提供的所有产品都是衍生自同一个接口或抽象类,而抽象工厂模式所提供的产品则是衍生自不同的接口或抽象类。

GOF的《设计模式》指出抽象工厂模式的意图是:
提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类。

工厂模式主要是为创建对象提供了接口。工厂模式按照抽象层次可分为以下几类:简单工厂模式(Simple Factory)、工厂方法模式(Factory Method)和抽象工厂模式(Abstract Factory)。

Abstract Factory模式适用于以下场景:

  • 一个系统要独立于它的产品的创建、组合和表示时。
  • 一个系统要由多个产品系列中的一个来配置时。
  • 当你要强调一系列相关的产品对象的设计以便进行联合使用时。
  • 当你提供一个产品类库,而只想显示它们的接口而不是实现时。

模式图解

在抽象工厂模式中,有一个产品族的概念:所谓的产品族,是指位于不同产品等级结构中功能相关联的产品组成的家族。抽象工厂模式所提供的一系列产品就组成一个产品族;而工厂方法提供的一系列产品称为一个等级结构。我们依然拿生产汽车的例子来说明他们之间的区别。工厂方法模式的UML示例如下:

创建型设计模式: 抽象工厂模式(Abstract Factory Pattern)_第1张图片

抽象工厂模式的工作过程如下:

  • AbstractFactory类声明一个创建抽象产品对象的操作接口;
  • ConcreteFactory类实现创建具体产品对象的操作;
  • AbstractProduct类声明了抽象的对象声明,即接口声明;
  • ConcreteProduct类定义了具体工厂创建的产品对象,并实现了AbstractProduct接口;
  • Client类使用抽象接口实现功能(AbstractFactory/AbstractProduct)

抽象工厂模式的有益效果如下:

  • 系统依赖于抽象的类,具体的类之间松耦合。
  • 系统非常容易替换掉产品系列和工厂类型,更加配置替换工厂和产品类型也是可行的;
  • 系统一致性获得增强,系统包含多种类型对象时,系统单次只能使用一种对象;
  • 难以支持新种类的产品, 并且难以扩展抽象工厂以生产新种类的产品。

模式实例

Android中间件中抽象工厂模式应用广泛,例如:

  • ${android_sdk_root}/frameworks/av/media/libeffects/factory/EffectsFactory.c
  • ${android_sdk_root}/frameworks/av/media/

系列文章

  • CSDN专栏: 设计模式(UML/23种模式)
  • Github专栏: 设计模式(UML/23种模式)

参考文献

  • GOF的设计模式:可复用面向对象软件的基础
  • 设计模式之禅
  • 图说设计模式

你可能感兴趣的:(设计模式专题,设计模式(UML/23种模式))