工厂模式是一种创建型设计模式,它提供了一种将实例化对象的过程延迟到子类或具体实现类的方法。工厂模式分为三种类型:简单工厂模式、工厂方法模式和抽象工厂模式 。,,- 简单工厂模式:通过一个工厂类来创建不同类型的对象,客户端通过传递不同的参数给工厂类,工厂类根据参数的不同来创建不同类型的对象。,- 工厂方法模式:定义一个用于创建对象的接口,让子类决定实例化哪一个类。工厂方法使一个类的实例化延迟到其子类。,- 抽象工厂模式:提供一个接口,用于创建相关或依赖对象的家族,而不需要明确指定具体类。
在软件开发过程中,我们经常会遇到这样的问题:如何在不修改原有代码的情况下,增加新的功能?这时,我们就需要借助于一种编程设计模式——工厂模式,工厂模式是一种创建型设计模式,它提供了一种创建对象的最佳方式,通过使用工厂模式,我们可以将对象的创建过程与使用过程解耦,使得系统的扩展和维护变得更加简单。
工厂模式的核心思想是将对象的创建过程封装在一个工厂类中,通过调用工厂类的方法来创建所需的对象,这样,当我们需要增加新的功能时,只需要在工厂类中添加相应的方法即可,而不需要修改原有的代码,工厂类还可以根据不同的条件返回不同类型的对象,这样就实现了对象的复用。
工厂模式主要包括以下几种类型:
1、简单工厂模式(Simple Factory Pattern):是最简单的工厂模式,它只负责创建对象,不涉及对象的组合和装配,这种模式适用于对象创建过程相对简单,且对象之间关系较少的情况。
class SimpleFactory: def create_product(self): pass class ProductA(Product): def operation(self): pass class ProductB(Product): def operation(self): pass factory = SimpleFactory() product_a = factory.create_product() product_b = factory.create_product()
2、工厂方法模式(Factory Method 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 ProductA() def create_product_b(self): return ProductB() class ConcreteFactory2(AbstractFactory): def create_product_a(self): return ProductC() def create_product_b(self): return ProductD()
3、抽象工厂模式(Abstract Factory Pattern):是一种更高级的工厂模式,它允许一个工厂类为多个产品族提供产品,这种模式适用于当一个产品的创建涉及到多个步骤,或者这些步骤之间存在依赖关系的情况。
from abc import ABC, abstractmethod from factory import AbstractFactory, ProductA, ProductB, ProductC, ProductD from product import ConcreteProductA1, ConcreteProductA2, ConcreteProductB1, ConcreteProductB2, ConcreteProductC1, ConcreteProductC2, ConcreteProductD1, ConcreteProductD2 class AbstractProductFactory(AbstractFactory): @abstractmethod def create_product_a1(self): pass @abstractmethod def create_product_a2(self): pass @abstractmethod def create_product_b1(self): pass @abstractmethod def create_product_b2(self): pass ...省略其他方法... ...省略其他方法...
4、建造者模式(Builder Pattern):虽然与工厂模式有一定的关联性,但它并不是工厂模式的一种,建造者模式主要用于将一个复杂对象的构建与其表示分离,使得同样的构建过程可以创建不同的表示,这有助于减少代码重复和提高代码可维护性。