以下是抽象工厂模式的一般结构:
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/设计模式