抽象工厂模式 Abstract Factory

发布时间 2023-12-21 08:54:44作者: 梅丹隆

一、定义

提供一个创建一系列相关或相互依赖对象的接口

  • 抽象工厂模式侧重的是同一产品族,而抽象工厂侧重的是同一产品等级

image.png

二、适用场景

  1. 客户端(应用层)不依赖于产品类实例如何被创建、实现等细节
  2. 强调一些列相关的产品对象(属于同一产品族)一起使用,创建对象需要大量复杂代码
  3. 提供一个产品类的库,所有的产品以同样的接口出现,从而使客户端不依赖具体实现

产品族概念
image.png

三、优缺点

优点:

  • 解决了工厂模式只生产一种产品的弊端
  • 新增一个产品族,只需要增加一个新的具体工厂,不需要修改代码
  • 具体产品在应用层代码隔离,无需关心创建细节

缺点:

  • 新增产品等级时需要修改抽象工厂的接口,违背开闭原则 OpenClose,增加系统复杂度

四、与工厂模式的区别:

工厂方法模式:
每个抽象产品派生多个具体产品类,每个抽象工厂类派生多个具体工厂类,每个具体工厂类负责一个具体产品的实例创建
抽象工厂模式:
每个抽象产品派生多个具体产品类,每个抽象工厂派生多个具体工厂类,每个具体工厂负责一系列具体产品的实力创建

五、代码示例

https://github.com/Meidanlong/all-in-one/tree/master/design/src/main/java/com/mdl/design/pattern/creational/abstractfactory

UML类图
image.png