版权声明:本文为 newtrekWang 原创文章,可以随意转载,但必须在明确位置注明出处!!!

参考

  • 《设计模式解析》 第十一章 Abstract Factory模式
  • 《设计模式:可复用面向对象软件的基础 》3.1 Abstract Factory 抽象工厂 对象创建型模式
  • 《Android源码设计模式解析与实战》第6章 创建型设计模式--抽象工厂模式

意图

协调对象的实例化,提供一个创建一系列相关或相互依赖对象的接口,而无需指定它们具体的类。

我觉得就是在工厂方法模式里的工厂类再做一层抽象,从一维抽象升级为二维抽象,在纵向的基础上又加了横向。

别名

Kit

适用场景

  • 一个系统要独立于它的产品创建,组合和表示时。
  • 一个系统要由多个产品系列中的一个来配置时。
  • 当你要强调一系列相关的产品对象的设计以便进行联合使用时。

结构

结构

  • AbstracFactory: 抽象工厂,它声明了一组用于创建产品的方法,每一个方法对应一种产品。
  • ConcreteFactory: 具体工厂,它实现了在抽象工厂中定义的创建产品的方法,生成一组具体产品,这些产品构成了一个产品种类,每一个产品都位于某个产品等级结构中。
  • AbstractProduct: 抽象产品角色,他为每种产品声明接口
  • ConcreteProduct: 具体产品角色,他定义了具体工厂生产的具体产品对象,实现抽象产品接口中声明的业务方法。

例子1 车厂造车

描述

奥迪Q3,Q5,Q7都是一个车系,但是三者之间的零部件差别却是很大,比如Q3的发动机是国产的,Q7是原装进口的,Q3的轮胎是普通轮胎,Q7是越野轮胎。所以工厂造一辆车,要分别造发动机,轮胎,制动系统组成。

结构

结构

代码实现

有类图了,略

应用例子2 Android中的MediaPlayerFactory

优点

  • 分离接口和实现,客户端使用抽象工厂来创建需要的对象,而客户端根本不知道具体的实现是谁,客户端只是面向产品的接口编程而已。

缺点

  • 使类文件爆炸
  • 不太容易扩展新的产品类,每当我们想要增加一个产品类就需要修改抽象工厂,那么所有的具体工厂都要修改。

Hits: 11

分类: 设计模式

发表评论

电子邮件地址不会被公开。 必填项已用*标注