抽象工厂

image-20220128195659444

抽象工厂

结构

image-20220128204736919

  1. 抽象产品(Abstract Product)为构成系列产品的一组不同但相关的产品声明接口。

  2. 具体产品(Concrete Product)是抽象产品的多种不同类型实现。所有变体(维多利亚/现代)都必须实现相应的抽象产品(椅子/沙发)。

  3. 抽象工厂(Abstract Factory)接口声明了一组创建各种抽象产品的方法。

  4. 具体工厂(Concrete Factory)实现抽象工厂的构建方法。每个具体工厂都对应特定产品变体,且仅创建此种产品变体。

  5. 尽管具体工厂会对具体产品进行初始化,其构建方法签名必须返回相应的抽象产品。这样,使用工厂类的客户端代码就不会与工厂创建的特定产品变体耦合。客户端(Client)只需通过抽象接口调用工厂和产品对象,就能与任何具体工厂/产品变体交互。

适用场景

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

  • 如果你有一个基于一组抽象方法的类,且其主要功能因此变得不明确,那么在这种情况下可以考虑使用抽象工厂模式。

优缺点

  • Pros

    • 你可以确保同一工厂生成的产品相互匹配。

    • 你可以避免客户端和具体产品代码的耦合。

    • 单一职责原则。你可以将产品生成代码抽取到同一位置,使得代码易于维护。

    • 开闭原则。向应用程序中引入新产品变体时,你无需修改客户端代码。

  • Cons

    • 由于采用该模式需要向应用中引入众多接口和类,代码可能会比之前更加复杂
  • Copyrights © 2018-2022 Haojia Zhu
  • Visitors: | Views:

请我喝杯咖啡吧~

支付宝
微信