工厂模式是创建型设计模式之一,它提供了一种创建对象的接口,但允许子类决定将哪个类实例化。工厂模式通过定义一个创建对象的接口,将实际实例化的过程延迟到子类中,从而使一个类的实例化过程与客户端代码解耦。

工厂模式主要包括三种形式:简单工厂模式、工厂方法模式和抽象工厂模式。

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:
       def operation(self):
           return "Product A operation"

   class ProductB:
       def operation(self):
           return "Product B operation"

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()

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()

在工厂模式中,客户端代码通常仅与工厂接口或抽象类交互,而不直接与具体产品类交互。这样可以使系统更灵活,能够轻松切换或扩展产品类的实现,同时符合开闭原则。选择哪种工厂模式取决于具体的需求和系统设计。


转载请注明出处:http://www.pingtaimeng.com/article/detail/11838/设计模式