🗒️Day29【概念解析】 抽象工厂方法
00 分钟
2023-10-20
2023-10-27
type
status
date
slug
summary
tags
category
icon
password

整理定义

中文名称:抽象工厂模式
英文名称:abstract factory pattern
出处
定义
中国大百科全书
一种设计模式。提供相关的或相互依赖的一组待创建对象的接口,根据不同的配置或运行环境加载具有相同接口的不同类的实例。
百度百科
抽象工厂模式(Abstract Factory Pattern)隶属于设计模式中的创建型模式,用于产品族的构建。抽象工厂是所有形态的工厂模式中最为抽象和最具一般性的一种形态。抽象工厂是指当有多个抽象角色时使用的一种工厂模式。抽象工厂模式可以向客户端提供一个接口,使客户端在不必指定产品的具体情况下,创建多个产品族中的产品对象。
维基百科
The abstract factory pattern in software engineering is a design pattern that provides a way to create families of related objects without imposing their concrete classes, by encapsulating a group of individual factories that have a common theme without specifying their concrete classes. 软件工程中的抽象工厂模式是一种设计模式,它提供了一种创建相关对象族而不强加其具体类的方法,通过封装一组具有共同主题的单独工厂而不指定其具体类。

复述展开

抽象工厂模式属于创建型对象模式
notion image
 

抽象工厂模式结构

notion image
  1. 抽象产品 (Abstract Product) 为构成系列产品的一组不同但相关的产品声明接口。
  1. 具体产品 (Concrete Product) 是抽象产品的多种不同类型实现。 所有变体 (维多利亚/现代) 都必须实现相应的抽象产品 (椅子/沙发)。
  1. 抽象工厂 (Abstract Factory) 接口声明了一组创建各种抽象产品的方法。
  1. 具体工厂 (Concrete Factory) 实现抽象工厂的构建方法。 每个具体工厂都对应特定产品变体, 且仅创建此种产品变体。
  1. 尽管具体工厂会对具体产品进行初始化, 其构建方法签名必须返回相应的抽象产品。 这样, 使用工厂类的客户端代码就不会与工厂创建的特定产品变体耦合。 客户端 (Client) 只需通过抽象接口调用工厂和产品对象, 就能与任何具体工厂/产品变体交互。

应用场景

💡
如果代码需要与多个不同系列的相关产品交互, 但是由于无法提前获取相关信息, 或者出于对未来扩展性的考虑, 你不希望代码基于产品的具体类进行构建, 在这种情况下, 你可以使用抽象工厂。
💡
如果你有一个基于一组抽象方法的类, 且其主要功能因此变得不明确, 那么在这种情况下可以考虑使用抽象工厂模式。

优缺点

优点:
  • 你可以确保同一工厂生成的产品相互匹配。
  • 你可以避免客户端和具体产品代码的耦合。
  • 单一职责原则。 你可以将产品生成代码抽取到同一位置, 使得代码易于维护。
  • 开闭原则。 向应用程序中引入新产品变体时, 你无需修改客户端代码。
缺点:
  • 由于采用该模式需要向应用中引入众多接口和类, 代码可能会比之前更加复杂。

理解体会

抽象工厂模式是一种创建型设计模式,它提供了一种方式,可以将一组具有同一主题的单独但相关/依赖的工厂封装起来。在抽象工厂模式中,客户端并不直接创建对象,而是通过调用工厂方法来创建对象。
我的理解是,抽象工厂模式主要用于处理系统中多个产品族【产品矩阵】的情况,而且系统只消费其中某一族的产品。例如,一个应用程序需要支持多种外观主题,每种主题都有一套特定的控件,如按钮、滚动条、窗口等。使用抽象工厂模式,我们可以为每种主题创建一个工厂,这个工厂可以创建该主题的所有控件。
 

参考:

 
📌
快速跳转链接
【概念解析】启动
【概念解析】Day 1 - 10
【概念解析】Day 11 - 20
【概念解析】Day 21 - 30
【概念解析】Day 31 - 40
【概念解析】Day 41 - 50
【概念解析】Day 51 - 60
【概念解析】Day 61 - 70
【概念解析】Day 71 - 80
【概念解析】Day 81 - 90
 
上一篇
Day30【概念解析】建造者模式
下一篇
Day28 【概念解析】工厂方法模式

评论
Loading...