工厂模式是一种创建型设计模式,它提供了一种创建对象的接口,但将对象的实际创建延迟到子类。工厂模式包含一个超类,该超类提供了一个创建对象的接口,但不指定具体类的实现。具体的对象创建由子类负责。

工厂模式有三种主要的变体:简单工厂模式、工厂方法模式和抽象工厂模式。

1. 简单工厂模式(Simple Factory Pattern):

简单工厂模式是工厂模式的一种最简单形式,它通过一个工厂类来创建产品。客户端只需要提供工厂类需要的参数,而不需要关心具体的创建过程。
class SimpleFactory:
    def create_product(self, product_type):
        if product_type == "A":
            return ProductA()
        elif product_type == "B":
            return ProductB()
        else:
            raise ValueError("Invalid product type")

class ProductA:
    pass

class ProductB:
    pass

# 使用简单工厂
factory = SimpleFactory()
product_a = factory.create_product("A")
product_b = factory.create_product("B")

2. 工厂方法模式(Factory Method Pattern):

工厂方法模式定义了一个接口,让子类决定实例化哪个类。工厂方法模式使一个类的实例化延迟到其子类。
from abc import ABC, abstractmethod

class Creator(ABC):
    @abstractmethod
    def create_product(self):
        pass

class ConcreteCreatorA(Creator):
    def create_product(self):
        return ProductA()

class ConcreteCreatorB(Creator):
    def create_product(self):
        return ProductB()

class ProductA:
    pass

class ProductB:
    pass

# 使用工厂方法
creator_a = ConcreteCreatorA()
product_a = creator_a.create_product()

creator_b = ConcreteCreatorB()
product_b = creator_b.create_product()

3. 抽象工厂模式(Abstract Factory Pattern):

抽象工厂模式提供一个接口,用于创建与产品家族相关的对象,而不需要指定具体的类。抽象工厂模式通过引入抽象工厂接口和具体工厂类来实现。
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 ProductA1()

    def create_product_b(self):
        return ProductB1()

class ConcreteFactory2(AbstractFactory):
    def create_product_a(self):
        return ProductA2()

    def create_product_b(self):
        return ProductB2()

class ProductA1:
    pass

class ProductB1:
    pass

class ProductA2:
    pass

class ProductB2:
    pass

# 使用抽象工厂
factory1 = ConcreteFactory1()
product_a1 = factory1.create_product_a()
product_b1 = factory1.create_product_b()

factory2 = ConcreteFactory2()
product_a2 = factory2.create_product_a()
product_b2 = factory2.create_product_b()

工厂模式的目标是提供一个接口,将对象的实例化延迟到子类,从而实现解耦合、代码灵活性和可维护性。选择何种工厂模式取决于具体的需求和设计情境。


转载请注明出处:http://www.zyzy.cn/article/detail/13937/设计模式