一、定义
提供一个创建一系列相关或相互依赖对象的接口
- 抽象工厂模式侧重的是同一产品族,而抽象工厂侧重的是同一产品等级
二、适用场景
- 客户端(应用层)不依赖于产品类实例如何被创建、实现等细节
- 强调一些列相关的产品对象(属于同一产品族)一起使用,创建对象需要大量复杂代码
- 提供一个产品类的库,所有的产品以同样的接口出现,从而使客户端不依赖具体实现
三、优缺点
优点:
- 解决了工厂模式只生产一种产品的弊端
- 新增一个产品族,只需要增加一个新的具体工厂,不需要修改代码
- 具体产品在应用层代码隔离,无需关心创建细节
缺点:
- 新增产品等级时需要修改抽象工厂的接口,违背开闭原则 OpenClose,增加系统复杂度
四、与工厂模式的区别:
工厂方法模式:
每个抽象产品派生多个具体产品类,每个抽象工厂类派生多个具体工厂类,每个具体工厂类负责一个
具体产品的实例创建
抽象工厂模式:
每个抽象产品派生多个具体产品类,每个抽象工厂派生多个具体工厂类,每个具体工厂负责一系列
具体产品的实力创建
五、代码示例
UML类图