工厂模式主要包括三种形式:简单工厂模式、工厂方法模式和抽象工厂模式。
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/设计模式