📅  最后修改于: 2023-12-03 14:46:47.631000             🧑  作者: Mango
抽象工厂模式是一种创建型设计模式,它允许客户端使用抽象接口来创建一组相关的对象,而不需要指定它们的具体类。它与工厂方法模式的区别在于,工厂方法模式只能创建单个产品对象,而抽象工厂模式可以创建多个产品对象。
在Python中,可以使用抽象基类来定义抽象工厂接口。具体工厂子类实现这些接口,并创建相关的产品对象。每个产品对象由其单独的类实现,并由抽象产品接口定义。
from abc import ABC, abstractmethod
class AbstractFactory(ABC):
@abstractmethod
def create_product_a(self):
pass
@abstractmethod
def create_product_b(self):
pass
class ConcreteFactory1(AbstractFactory):
def create_product_a(self):
return ConcreteProductA1()
def create_product_b(self):
return ConcreteProductB1()
class ConcreteFactory2(AbstractFactory):
def create_product_a(self):
return ConcreteProductA2()
def create_product_b(self):
return ConcreteProductB2()
from abc import ABC, abstractmethod
class AbstractProductA(ABC):
@abstractmethod
def do_something(self):
pass
class AbstractProductB(ABC):
@abstractmethod
def do_something(self):
pass
class ConcreteProductA1(AbstractProductA):
def do_something(self):
return "Product A1"
class ConcreteProductA2(AbstractProductA):
def do_something(self):
return "Product A2"
class ConcreteProductB1(AbstractProductB):
def do_something(self):
return "Product B1"
class ConcreteProductB2(AbstractProductB):
def do_something(self):
return "Product B2"
class Client:
def __init__(self, factory):
self._product_a = factory.create_product_a()
self._product_b = factory.create_product_b()
def do_something(self):
print(self._product_a.do_something())
print(self._product_b.do_something())
if __name__ == "__main__":
factory1 = ConcreteFactory1()
client1 = Client(factory1)
client1.do_something()
factory2 = ConcreteFactory2()
client2 = Client(factory2)
client2.do_something()
抽象工厂模式提供了一种方便的方法来创建一组相关的对象,而无需指定它们的具体类。它适用于需要创建多个相关对象的情况,例如在Web应用程序中创建多个相关的数据库连接对象。在Python中,可以使用抽象基类来定义抽象工厂接口。具体工厂子类实现这些接口,并创建相关的产品对象。每个产品对象由其单独的类实现,并由抽象产品接口定义。