抽象工厂模式是一种创建型设计模式,它提供了一个接口,用于创建一系列相关或相互依赖的对象,而无需指定它们的具体类。抽象工厂模式是工厂方法模式的延伸,它引入了一组工厂接口,每个接口负责创建一类产品。

以下是抽象工厂模式的主要组成部分:

1. 抽象工厂(Abstract Factory): 定义创建一系列产品的接口,每个方法对应一个产品。
2. 具体工厂(Concrete Factory): 实现抽象工厂接口,负责创建一组相关的产品。
3. 抽象产品(Abstract Product): 定义一类产品的接口。
4. 具体产品(Concrete Product): 实现抽象产品接口,是由具体工厂创建的对象。

下面是一个简单的 Python 示例:
from abc import ABC, abstractmethod

# 抽象产品A
class AbstractProductA(ABC):
    @abstractmethod
    def operation_a(self):
        pass

# 具体产品A1
class ProductA1(AbstractProductA):
    def operation_a(self):
        return "Product A1 Operation"

# 具体产品A2
class ProductA2(AbstractProductA):
    def operation_a(self):
        return "Product A2 Operation"

# 抽象产品B
class AbstractProductB(ABC):
    @abstractmethod
    def operation_b(self):
        pass

# 具体产品B1
class ProductB1(AbstractProductB):
    def operation_b(self):
        return "Product B1 Operation"

# 具体产品B2
class ProductB2(AbstractProductB):
    def operation_b(self):
        return "Product B2 Operation"

# 抽象工厂
class AbstractFactory(ABC):
    @abstractmethod
    def create_product_a(self) -> AbstractProductA:
        pass

    @abstractmethod
    def create_product_b(self) -> AbstractProductB:
        pass

# 具体工厂1
class ConcreteFactory1(AbstractFactory):
    def create_product_a(self) -> AbstractProductA:
        return ProductA1()

    def create_product_b(self) -> AbstractProductB:
        return ProductB1()

# 具体工厂2
class ConcreteFactory2(AbstractFactory):
    def create_product_a(self) -> AbstractProductA:
        return ProductA2()

    def create_product_b(self) -> AbstractProductB:
        return ProductB2()

# 客户端代码
def client_code(factory: AbstractFactory):
    product_a = factory.create_product_a()
    product_b = factory.create_product_b()

    print(product_a.operation_a())
    print(product_b.operation_b())

# 使用具体工厂1
client_code(ConcreteFactory1())

# 使用具体工厂2
client_code(ConcreteFactory2())

在这个示例中,AbstractFactory 定义了两个抽象方法,分别用于创建产品 A 和产品 B。ConcreteFactory1 和 ConcreteFactory2 分别实现了这个抽象工厂接口,负责创建一组相关的产品。每个产品都有对应的抽象类和具体类。

抽象工厂模式的优势在于它可以确保一组相关的产品能够一起使用,并且可以方便地替换整个产品系列,而不用修改客户端代码。


转载请注明出处:http://www.zyzy.cn/article/detail/13938/设计模式