📅  最后修改于: 2023-12-03 15:39:46.595000             🧑  作者: Mango
抽象工厂方法是一种创建型设计模式,该模式提供了一种解耦对象的创建方法。它通过提供一个工厂接口,该接口可以用于创建相关对象系列,而无需指定具体的类。这种方法可以实现对象的抽象化,使得我们可以对对象进行分组并以一种统一的方式管理。
from abc import ABC, abstractmethod
# 抽象产品A
class AbstractProductA(ABC):
@abstractmethod
def do_something(self) -> None:
pass
# 抽象产品B
class AbstractProductB(ABC):
@abstractmethod
def do_something(self) -> None:
pass
# 具体产品A1
class ConcreteProductA1(AbstractProductA):
def do_something(self) -> None:
print("具体产品A1")
# 具体产品A2
class ConcreteProductA2(AbstractProductA):
def do_something(self) -> None:
print("具体产品A2")
# 具体产品B1
class ConcreteProductB1(AbstractProductB):
def do_something(self) -> None:
print("具体产品B1")
# 具体产品B2
class ConcreteProductB2(AbstractProductB):
def do_something(self) -> None:
print("具体产品B2")
# 抽象工厂
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 ConcreteProductA1()
def create_product_b(self) -> AbstractProductB:
return ConcreteProductB1()
# 具体工厂2
class ConcreteFactory2(AbstractFactory):
def create_product_a(self) -> AbstractProductA:
return ConcreteProductA2()
def create_product_b(self) -> AbstractProductB:
return ConcreteProductB2()
# 客户端
class Client:
def __init__(self, factory: AbstractFactory):
self._product_a = factory.create_product_a()
self._product_b = factory.create_product_b()
def run(self) -> None:
self._product_a.do_something()
self._product_b.do_something()
if __name__ == "__main__":
client1 = Client(ConcreteFactory1())
client1.run()
client2 = Client(ConcreteFactory2())
client2.run()
抽象工厂方法是一种实现对象抽象化的方法,它可以将一组相关对象作为单个单元进行处理。这可以使客户端更容易使用这些对象,并在需要时更改其实现。此方法还提供了一种以一种统一的方式管理对象的方法。