抽象工厂模式是一种创建型设计模式,它提供一个接口,用于创建一系列相关或依赖对象的家族,而不需要指定其具体类。抽象工厂模式包含多个工厂方法,每个工厂方法用于创建不同类型的产品,形成一个产品家族。

以下是抽象工厂模式的一般结构:

1. 抽象产品(Abstract Product): 定义产品的接口,对于每个产品家族中的产品,都有一个对应的抽象产品。

2. 具体产品(Concrete Product): 实现抽象产品接口,是产品家族中的具体产品。

3. 抽象工厂(Abstract Factory): 声明创建产品的接口,包含多个工厂方法,每个方法用于创建一个产品家族中的产品。

4. 具体工厂(Concrete Factory): 实现抽象工厂接口,负责实例化具体产品。

下面是一个简单的 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()

在这个例子中,AbstractFactory 声明了创建产品A和产品B的接口,而 ConcreteFactory1 和 ConcreteFactory2 分别实现了这个接口,负责创建产品家族中的具体产品。客户端代码可以通过选择不同的具体工厂来创建不同的产品家族。这种模式支持产品家族的独立变化和替换,同时保持了客户端代码与具体产品类的解耦。


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