当前位置: 首页 > news >正文

python工厂模式

工厂模式简介

工厂模式是一种创建对象的设计模式,它将对象的创建和使用分离。其核心思想是通过一个工厂类来负责创建对象,而不是在客户端代码中直接实例化对象。这样做的好处有:

  • 降低耦合度:客户端代码不需要知道具体的对象创建细节,只需要向工厂请求所需的对象,减少了代码之间的依赖。
  • 提高可维护性和可扩展性:当需要添加新的产品类型时,只需在工厂类中添加相应的创建逻辑,而不需要修改客户端代码。

下面以一段代码讲解一下实现细节:

实现一个产品基类:

import abc
from enum import Enum# 定义一个抽象基类产品
class Product(metaclass=abc.ABCMeta):@abc.abstractmethoddef operation(self):pass
  • 导入模块abc 模块用于创建抽象基类,enum 模块用于创建枚举类型。
  • 抽象基类 Product:使用 abc.ABCMeta 作为元类定义了一个抽象基类 Product,并使用 @abc.abstractmethod 装饰器定义了抽象方法 operation。这意味着所有继承自 Product 的具体类都必须实现 operation 方法。

继承抽象基类Product,并实现operation方法:

# 具体产品类 1
class ConcreteProduct1(Product):def operation(self):return "ConcreteProduct1 operation"# 具体产品类 2
class ConcreteProduct2(Product):def operation(self):return "ConcreteProduct2 operation"
  • 具体产品类ConcreteProduct1 和 ConcreteProduct2 继承自 Product 抽象基类,并实现了 operation 方法。每个具体产品类都有自己独特的操作实现。

用枚举类型Enum定义产品的类型:

# 产品类型枚举
class ProductType(Enum):TYPE1 = 1TYPE2 = 2
  • 产品类型枚举:使用 enum.Enum 定义了一个枚举类 ProductType,用于表示不同类型的产品。这里定义了两种产品类型 TYPE1 和 TYPE2

创建一个工厂类实现生产细节:

# 工厂类
class Factory:@staticmethoddef create_product(product_type):if product_type == ProductType.TYPE1:return ConcreteProduct1()elif product_type == ProductType.TYPE2:return ConcreteProduct2()else:raise ValueError("Invalid product type")
  • 工厂类 Factory:包含一个静态方法 create_product,该方法接受一个 product_type 参数,根据传入的产品类型创建相应的产品实例。如果传入的产品类型无效,会抛出 ValueError 异常。

工厂实例化,传入产品类型的参数,调用函数生产产品:

# 客户端代码
if __name__ == "__main__":product1 = Factory.create_product(ProductType.TYPE1)print(product1.operation())product2 = Factory.create_product(ProductType.TYPE2)print(product2.operation())

完整代码如下:

import abc
from enum import Enum# 定义一个抽象基类产品
class Product(metaclass=abc.ABCMeta):@abc.abstractmethoddef operation(self):pass# 具体产品类 1
class ConcreteProduct1(Product):def operation(self):return "ConcreteProduct1 operation"# 具体产品类 2
class ConcreteProduct2(Product):def operation(self):return "ConcreteProduct2 operation"# 产品类型枚举
class ProductType(Enum):TYPE1 = 1TYPE2 = 2# 工厂类
class Factory:@staticmethoddef create_product(product_type):if product_type == ProductType.TYPE1:return ConcreteProduct1()elif product_type == ProductType.TYPE2:return ConcreteProduct2()else:raise ValueError("Invalid product type")# 客户端代码
if __name__ == "__main__":product1 = Factory.create_product(ProductType.TYPE1)print(product1.operation())product2 = Factory.create_product(ProductType.TYPE2)print(product2.operation())

原文地址:https://blog.csdn.net/duomoke/article/details/146516167
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mrgr.cn/news/95847.html

相关文章:

  • 2025前端面试题(vue、react、uniapp、微信小程序、JS、CSS、其他)
  • 吾爱出品,文件分类助手,高效管理您的 PC 资源库
  • 内核编程十二:打印task_struct中的数据
  • 单片机和微控制器知识汇总——《器件手册--单片机、数字信号处理器和可编程逻辑器件》
  • Mycat安装验证流程整理
  • 【Pandas】pandas Series to_csv
  • Vue 3 组件高级语法
  • 【c++入门系列】:引用以及内联函数详解
  • 【Golang】补充:占位符、转义字符、错误处理
  • Cucumber 专题系列 - 第三篇:编写第一个 Feature 文件
  • 轮回的起点与终点:一场跨越时空的哲学对话
  • 程序化广告行业(33/89):深入了解OTT、OTV及多样广告形式
  • 【精心整理】2025 DeepSeek 精品学习资料合集-共50份(教程+原理解读+行业应用+技术实践).zip
  • 36.评论日记
  • 【工程记录】QwQ-32b 8bit量化部署教程(vLLM | 缓解复读)
  • LVS的 NAT 模式实验
  • 性能测试笔记
  • Rust从入门到精通之精通篇:26.性能优化技术
  • VUE3项目VITE打包优化
  • UART转APB模块ModelSim仿真