欢迎来到尧图网

客户服务 关于我们

您的位置:首页 > 教育 > 培训 > 创建型设计模式-工厂模式(Factory Pattern)- python实现

创建型设计模式-工厂模式(Factory Pattern)- python实现

2025/10/13 14:36:21 来源:https://blog.csdn.net/linkedin_21843693/article/details/141363050  浏览:    关键词:创建型设计模式-工厂模式(Factory Pattern)- python实现

设计模式汇总:查看

工厂模式(Factory Pattern)是软件设计中常用的一种创建型设计模式,它的主要目的是用于创建对象,同时隐藏创建逻辑,而不是通过直接使用new运算符实例化对象,这样可以提高程序的灵活性。

工厂模式的核心组成

抽象产品(Product):定义了产品的接口,描述了所有实例化对象的共同操作。

具体产品(Concrete Product):实现了抽象产品接口的具体类。

抽象工厂(Factory):提供了一个用于创建产品的接口,它通常包含一个工厂方法,此方法返回一个产品类型的实例。

具体工厂(Concrete Factory):实现了抽象工厂的工厂方法,决定了具体创建哪一个产品类。

工厂模式的分类

  • 简单工厂模式:一个工厂类负责创建所有类型的产品,客户端通过参数来决定创建哪种产品。
  • 工厂方法模式:定义了一个用于创建对象的接口,让子类决定实例化哪一个类。工厂方法使一个类的实例化延迟到其子类。
  • 抽象工厂模式:提供一个接口,用于创建相关或依赖对象的家族,而不需要明确指定具体类。
    具体参考:抽象工厂模式-python实现

工厂模式的用途

  • 当一个类不知道它必须创建哪些具体的对象时。
  • 当一个类希望由其子类来指定创建的对象时。
  • 当类将创建的对象集合起来,以实现特定的工厂方法时。

工厂模式的优点

  • 解耦:减少了客户代码和具体产品类之间的直接依赖关系。
  • 扩展性:新增产品类时,不需要修改已有系统代码。
  • 维护性:集中创建逻辑,易于维护。

Python中的工厂模式示例

以下是一个工厂方法模式的Python示例:

from abc import ABC, abstractmethodclass Creator(ABC):@abstractmethoddef factory_method(self):"""定义了一个工厂方法的接口。该方法是一个抽象方法,旨在被子类实现。子类应该根据自己的需求覆盖这个方法,提供具体的对象创建逻辑。工厂方法的设计模式允许子类决定实例化哪一个类,从而使系统更具可扩展性和灵活性。返回:无具体返回值,但子类实现时应该返回一个对象,该对象的类型是根据子类的实现决定的。"""passdef some_operation(self):"""执行特定操作,该操作涉及到使用工厂方法创建的产品。本方法展示了一个典型的使用工厂方法模式的场景,其中创建了一个产品对象,并使用该对象执行了一些操作。返回的结果字符串中包含了产品执行操作后的信息,强调了同一创建者创建的产品可以无缝协作。返回:一个字符串,包含了操作的结果和产品信息。"""# 使用工厂方法获取产品实例product = self.factory_method()# 构造操作结果的字符串,强调了产品之间的协作关系result = f"Creator: The same creator's code has just worked with {product.operation()}"return resultclass ConcreteCreator1(Creator):"""具体创建者1类,继承自Creator类。它实现了Creator类中的工厂方法,返回一个具体的产品1。"""def factory_method(self):"""生产具体产品1。返回:ConcreteProduct1: 具体产品1的实例。"""return ConcreteProduct1()class ConcreteCreator2(Creator):"""具体创建者2类,继承自Creator类。它实现了Creator类中的工厂方法,返回一个具体的产品2。"""def factory_method(self):"""生产具体产品2。返回:ConcreteProduct2: 具体产品2的实例。"""return ConcreteProduct2()class Product(ABC):"""产品类的抽象基类。该类为所有具体产品类的父类,定义了产品类必须实现的操作。"""@abstractmethoddef operation(self):"""抽象方法,具体产品类必须实现该方法。该方法定义了产品类的共同行为,每个具体产品类都需要根据自己的特点实现该方法。"""passclass ConcreteProduct1(Product):"""具体产品1类,实现了产品接口。这个类代表了产品的一种具体实现,ConcreteProduct1提供了特定的operation方法实现。"""def operation(self):"""执行具体操作。"""return "{Result of ConcreteProduct1}"class ConcreteProduct2(Product):"""具体产品2类,实现了产品接口。这个类代表了产品的一种具体实现,ConcreteProduct2提供了另一种特定的operation方法实现。"""def operation(self):"""执行具体操作。"""return "{Result of ConcreteProduct2}"if __name__ == "__main__":# 创建具体创建者1creator1 = ConcreteCreator1()# 使用创建者1创建产品result1 = creator1.some_operation()print(result1)# 创建具体创建者2creator2 = ConcreteCreator2()# 使用创建者2创建产品result2 = creator2.some_operation()print(result2)

版权声明:

本网仅为发布的内容提供存储空间,不对发表、转载的内容提供任何形式的保证。凡本网注明“来源:XXX网络”的作品,均转载自其它媒体,著作权归作者所有,商业转载请联系作者获得授权,非商业转载请注明出处。

我们尊重并感谢每一位作者,均已注明文章来源和作者。如因作品内容、版权或其它问题,请及时与我们联系,联系邮箱:809451989@qq.com,投稿邮箱:809451989@qq.com

热搜词