Day29【概念解析】 抽象工厂方法
目录 ▼
整理定义
中文名称:抽象工厂模式
英文名称:abstract factory pattern
复述展开
抽象工厂模式属于创建型对象模式

抽象工厂模式结构

-
抽象产品 (Abstract Product) 为构成系列产品的一组不同但相关的产品声明接口。
-
具体产品 (Concrete Product) 是抽象产品的多种不同类型实现。 所有变体 (维多利亚/现代) 都必须实现相应的抽象产品 (椅子/沙发)。
-
抽象工厂 (Abstract Factory) 接口声明了一组创建各种抽象产品的方法。
-
具体工厂 (Concrete Factory) 实现抽象工厂的构建方法。 每个具体工厂都对应特定产品变体, 且仅创建此种产品变体。
-
尽管具体工厂会对具体产品进行初始化, 其构建方法签名必须返回相应的抽象产品。 这样, 使用工厂类的客户端代码就不会与工厂创建的特定产品变体耦合。 客户端 (Client) 只需通过抽象接口调用工厂和产品对象, 就能与任何具体工厂/产品变体交互。
应用场景
💡 如果代码需要与多个不同系列的相关产品交互, 但是由于无法提前获取相关信息, 或者出于对未来扩展性的考虑, 你不希望代码基于产品的具体类进行构建, 在这种情况下, 你可以使用抽象工厂。
💡 如果你有一个基于一组抽象方法的类, 且其主要功能因此变得不明确, 那么在这种情况下可以考虑使用抽象工厂模式。
优缺点
优点:
-
你可以确保同一工厂生成的产品相互匹配。
-
你可以避免客户端和具体产品代码的耦合。
-
单一职责原则。 你可以将产品生成代码抽取到同一位置, 使得代码易于维护。
-
开闭原则。 向应用程序中引入新产品变体时, 你无需修改客户端代码。
缺点:
- 由于采用该模式需要向应用中引入众多接口和类, 代码可能会比之前更加复杂。
理解体会
抽象工厂模式是一种创建型设计模式,它提供了一种方式,可以将一组具有同一主题的单独但相关/依赖的工厂封装起来。在抽象工厂模式中,客户端并不直接创建对象,而是通过调用工厂方法来创建对象。
我的理解是,抽象工厂模式主要用于处理系统中多个产品族【产品矩阵】的情况,而且系统只消费其中某一族的产品。例如,一个应用程序需要支持多种外观主题,每种主题都有一套特定的控件,如按钮、滚动条、窗口等。使用抽象工厂模式,我们可以为每种主题创建一个工厂,这个工厂可以创建该主题的所有控件。
参考:
抽象工厂设计模式 (refactoringguru.cn)
Abstract factory pattern - Wikipedia