Skip to main content

抽象工厂模式

定义

产品族:同一种产品的不同品牌 产品等级结构:同一种品牌的不同产品

抽象工厂模式:

用于创造一个产品族的接口

抽象工厂和工厂方法模式的对比

  • 工厂方法可以提供多组工厂,每个工厂可以生产一类产品 m*n种产品
  • 抽象工厂可以提供多组工厂,每个工厂可以生产自己的产品族 m*n*p种产品

工厂方法可以看作一维,抽象工厂可以看作二维

模式结构

包括

  • 抽象工厂(interface)
  • 扩展工厂
  • 抽象产品 (interface)
  • 扩展工厂

抽象工厂接口中的方法,对应类型也是抽象产品 所以需要实现两次

优点

  • 扩展类生成隔离化,还是让用户不知道具体创建细节
  • 能保证同一个产品族的产品互相连续交互,因可以一起被设计出来和管理
  • 便于增加新的产品族,符合开闭原则

缺点

引入新的产品结构(比如所有品牌工厂增加空调的生产)可能会带来困难,和现存系统的显著修改

可能会违背开闭原则

什么时候该使用抽象工厂

  • 一个用户不需要关心产品类怎么创建 组织和扩展的系统(屏蔽细节)
  • 系统中有多种产品族,但是同一时刻只有一种被使用
  • 属于同一产品族的产品会被一起使用,而且这种关系会反映在系统设计中
  • 产品层级应该保持稳定;当设计完成后,不应该产品层级的增加和移除