工厂方法模式(Factory Method Pattern)
工厂方法模式是一种创建型设计模式,它定义了一个用于创建对象的接口,但将实际的对象创建延迟到子类。在工厂方法模式中,有一个抽象工厂类声明了一个工厂方法,该方法由子类实现,用于创建具体的产品对象。每个具体的产品都有一个对应的工厂类。这样,客户端可以通过调用工厂方法来创建所需的产品,而不必关心具体的产品类。
伪代码
实例演示
class Product(ABC):
@abstractmethod
def display(self):
pass
class ConcreteProductA(Product):
def display(self):
print("This is ConcreteProductA.")
class ConcreteProductB(Product):
def display(self):
print("This is ConcreteProductB.")
class Factory(ABC):
@abstractmethod
def create_product(self):
pass
class ConcreteFactoryA(Factory):
def create_product(self):
return ConcreteProductA()
class ConcreteFactoryB(Factory):
def create_product(self):
return ConcreteProductB()
def main():
factory_a = ConcreteFactoryA()
product_a = factory_a.create_product()
product_a.display()
factory_b = ConcreteFactoryB()
product_b = factory_b.create_product()
product_b.display()
if __name__ == "__main__":
main()
抽象工厂模式(Abstract Factory Pattern)
抽象工厂模式也是一种创建型设计模式,它提供了一个接口,用于创建相关或依赖对象的家族,而不需要指定它们的具体类。在抽象工厂模式中,有一个抽象工厂接口,该接口声明了一组用于创建不同产品家族的方法。每个具体的工厂类实现了这个接口,用于创建特定的产品家族。而这些产品家族通常是一起工作的,或者可以彼此替换。
伪代码
实例演示
class ProductA(ABC):
@abstractmethod
def display(self):
pass
class ConcreteProductA1(ProductA):
def display(self):
print("This is ConcreteProductA1.")
class ConcreteProductA2(ProductA):
def display(self):
print("This is ConcreteProductA2.")
class ProductB(ABC):
@abstractmethod
def display(self):
pass
class ConcreteProductB1(ProductB):
def display(self):
print("This is ConcreteProductB1.")
class ConcreteProductB2(ProductB):
def display(self):
print("This is ConcreteProductB2.")
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 ConcreteProductA1()
def create_product_b(self):
return ConcreteProductB1()
class ConcreteFactory2(AbstractFactory):
def create_product_a(self):
return ConcreteProductA2()
def create_product_b(self):
return ConcreteProductB2()
def main():
factory1 = ConcreteFactory1()
product_a1 = factory1.create_product_a()
product_b1 = factory1.create_product_b()
product_a1.display()
product_b1.display()
factory2 = ConcreteFactory2()
product_a2 = factory2.create_product_a()
product_b2 = factory2.create_product_b()
product_a2.display()
product_b2.display()
if __name__ == "__main__":
main()
以上是工厂方法模式和抽象工厂模式的详细介绍及代码实例。工厂方法模式适用于创建单个对象,而抽象工厂模式适用于创建一组相关的产品家族。在实际应用中,根据不同的需求和复杂性,选择适合的设计模式可以帮助提高代码的灵活性和可维护性。