抽象工厂模式
定义

产品族:同一种产品的不同品牌 产品等级结构:同一种品牌的不同产品
抽象工厂模式:
用于创造一个产品族的接口
抽象工厂和工厂方法模式的对比
- 工厂方法可以提供多组工厂,每个工厂可以生产一类产品
m*n
种产品 - 抽象工厂可以提供多组工厂,每个工厂可以生产自己的产品族
m*n*p
种产品
工厂方法可以看作一维,抽象工厂可以看作二维
模式结构

包括
- 抽象工厂(interface)
- 扩展工厂
- 抽象产品 (interface)
- 扩展工厂
抽象工厂接口中的方法,对应类型也是抽象产品 所以需要实现两次

优点
- 扩展类生成隔离化,还是让用户不知道具体创建细节
- 能保证同一个产品族的产品互相连续交互,因可以一起被设计出来和管理
- 便于增加新的产品族,符合开闭原则
缺点
引入新的产品结构(比如所有品牌工厂增加空调的生产)可能会带来困难,和现存系统的显著修改
可能会违背开闭原则
什么时候该使用抽象工厂
- 一个用户不需要关心产品类怎么创建 组织和扩展的系统(屏蔽细节)
- 系统中有多种产品族,但是同一时刻只有一种被使用
- 属于同一产品族的产品会被一起使用,而且这种关系会反映在系统设计中
- 产品层级应该保持稳定;当设计完成后,不应该产品层级的增加和移除