以下是抽象工厂模式的主要组成部分:
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/设计模式