【设计模式】创建型模式——抽象工厂模式

创建型模式——抽象工厂模式

一、定义

抽象工厂模式是一种创建型设计模式, 它能创建一系列相关的对象, 而无需指定其具体类

二、问题

假设你正在建造家居。有一系列相关产品, 例如 椅子、沙发、床。
系列产品的不同变体。 例如 中式风格、美式风格、欧式风格。
你需要设法单独生成每件家具对象, 来满足所有顾客。
并且不能够望在添加新产品或新风格时修改已有代码。

三、解决方案

1、首先, 抽象工厂模式建议为系列中的每件产品明确声明接口 (例如椅子、 沙发)。 然后, 确保所有产品变体都继承这些接口。 例如, 所有风格的椅子都实现 椅子接口; 所有风格的沙发都实现 沙发接口, 以此类推……
2、接下来, 我们需要声明抽象工厂——包含系列中所有产品构造方法的接口。 例如 创建椅子创建沙发。这些方法必须返回抽象产品类型, 即我们之前抽取的那些接口:椅子,沙发等等。
3、对于系列产品的每个变体, 我们都将基于抽象工厂接口创建不同的工厂类。 每个工厂类都只能返回特定类别的产品,例如,中式家具工厂只能创建 中式椅子 、中式沙发对象。

四、代码实现

代码实现没啥意思,还是看图吧。
在这里插入图片描述
1、抽象产品 (Abstract Product) 为构成系列产品的一组不同但相关的产品声明接口。
2、具体产品 (Concrete Product) 是抽象产品的多种不同类型实现。 所有变体 (中式/欧式/美式) 都必须实现相应的抽象产品 (椅子/沙发)。
3、抽象工厂 (Abstract Factory) 接口声明了一组创建各种抽象产品的方法。
4、具体工厂 (Concrete Factory) 实现抽象工厂的构建方法。 每个具体工厂都对应特定产品变体, 且仅创建此种产品变体。

五、UML图

在这里插入图片描述

六、抽象工厂模式使用场景

  • 如果代码需要与多个不同系列的相关产品交互, 但是由于无法提前获取相关信息, 或者出于对未来扩展性的考虑, 你不希望代码基于产品的具体类进行构建, 在这种情况下, 你可以使用抽象工厂。

七、总结

优点

  • 可以确保同一工厂生成的产品相互匹配。
  • 可以避免客户端和具体产品代码的耦合。
  • 单一职责原则。 你可以将产品生成代码抽取到同一位置, 使得代码易于维护。
  • 开闭原则。 向应用程序中引入新产品变体时, 你无需修改客户端代码。

缺点

  • 由于采用该模式需要向应用中引入众多接口和类, 代码可能会比之前更加复杂。

八、与其他模式的关系

  • 抽象工厂模式通常基于一组工厂方法, 但你也可以使用原型模式来生成这些类的方法
  • 当只需对客户端代码隐藏子系统创建对象的方式时, 你可以使用抽象工厂来代替外观模式。
  • 抽象工厂、 建造者和原型都可以用单例模式来实现

猜你喜欢

转载自blog.csdn.net/weixin_51799151/article/details/124560149