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