Python实现抽象工厂模式

抽象工厂模式是一种创建型设计模式,用于创建一系列相关或依赖对象的家族,而无需指定具体类。在Python中,可以通过类和接口的组合来实现抽象工厂模式。

下面是一个简单的Python实现抽象工厂模式的示例:

# 抽象产品接口
class AbstractProductA:
    def do_something(self):
        pass

class AbstractProductB:
    def do_something_else(self):
        pass

# 具体产品类
class ConcreteProductA1(AbstractProductA):
    def do_something(self):
        print("Product A1 doing something.")

class ConcreteProductA2(AbstractProductA):
    def do_something(self):
        print("Product A2 doing something.")

class ConcreteProductB1(AbstractProductB):
    def do_something_else(self):
        print("Product B1 doing something else.")

class ConcreteProductB2(AbstractProductB):
    def do_something_else(self):
        print("Product B2 doing something else.")

# 抽象工厂接口
class AbstractFactory:
    def create_product_a(self) -> AbstractProductA:
        pass

    def create_product_b(self) -> AbstractProductB:
        pass

# 具体工厂类
class ConcreteFactory1(AbstractFactory):
    def create_product_a(self) -> AbstractProductA:
        return ConcreteProductA1()

    def create_product_b(self) -> AbstractProductB:
        return ConcreteProductB1()

class ConcreteFactory2(AbstractFactory):
    def create_product_a(self) -> AbstractProductA:
        return ConcreteProductA2()

    def create_product_b(self) -> AbstractProductB:
        return ConcreteProductB2()

# 客户端代码
def client_code(factory: AbstractFactory):
    product_a = factory.create_product_a()
    product_b = factory.create_product_b()

    product_a.do_something()
    product_b.do_something_else()

# 使用具体工厂1
factory1 = ConcreteFactory1()
client_code(factory1)

# 使用具体工厂2
factory2 = ConcreteFactory2()
client_code(factory2)

在上面的示例中,我们定义了抽象产品接口 AbstractProductA 和 AbstractProductB,然后实现了具体的产品类 ConcreteProductA1、ConcreteProductA2、ConcreteProductB1 和 ConcreteProductB2。

接着,我们定义了抽象工厂接口 AbstractFactory,并实现了具体的工厂类 ConcreteFactory1 和 ConcreteFactory2,每个具体工厂类都负责创建一组相关产品的实例。

最后,在客户端代码中,我们可以通过传入不同的具体工厂对象,来创建不同家族的产品,并调用相应的方法。

这就是一个简单的Python实现抽象工厂模式的例子。通过抽象工厂模式,我们可以实现一组相关产品的创建,同时与具体产品的类名解耦,提高代码的灵活性和可维护性。

Python实现抽象工厂模式_第1张图片

你可能感兴趣的:(python,抽象工厂模式)