📜  Python设计模式-抽象工厂(1)

📅  最后修改于: 2023-12-03 14:46:47.631000             🧑  作者: Mango

Python设计模式-抽象工厂

概述

抽象工厂模式是一种创建型设计模式,它允许客户端使用抽象接口来创建一组相关的对象,而不需要指定它们的具体类。它与工厂方法模式的区别在于,工厂方法模式只能创建单个产品对象,而抽象工厂模式可以创建多个产品对象。

实现

在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中,可以使用抽象基类来定义抽象工厂接口。具体工厂子类实现这些接口,并创建相关的产品对象。每个产品对象由其单独的类实现,并由抽象产品接口定义。