0

0

Python工厂模式实现_创建对象优化

舞姬之光

舞姬之光

发布时间:2026-03-09 15:52:03

|

679人浏览过

|

来源于php中文网

原创

工厂模式是创建型设计模式,通过封装对象创建过程解耦业务逻辑与实例化细节,包含简单工厂(易用但违反开闭原则)、工厂方法(子类负责创建,支持扩展)和抽象工厂(创建相关产品族,适用于多风格组件)。

python工厂模式实现_创建对象优化

什么是工厂模式

工厂模式是一种创建型设计模式,它把对象的创建过程封装起来,让调用方不直接使用 class() 实例化,而是通过一个统一的接口(工厂)来获取对象。这样做的核心好处是:解耦对象创建逻辑与业务逻辑,便于扩展新类型、统一管理初始化参数、隐藏复杂构造细节。

简单工厂:适合类型不多的场景

简单工厂不是 GoF 23 种标准模式之一,但最易理解,常作为入门实践。它用一个函数或类方法,根据输入参数返回不同子类实例。

  • 定义一个基类(如 Payment),声明通用接口(如 pay()
  • 实现多个子类(AlipayWechatPayCardPay
  • 编写工厂函数 create_payment(method: str) -> Payment,内部用 if/elif 或字典映射决定返回哪个实例

优点是代码简洁;缺点是新增支付方式时需修改工厂函数,违反开闭原则。

工厂方法:支持动态扩展子类

将“创建对象”的责任下放到子类。定义一个抽象工厂类(如 PaymentFactory),声明抽象方法 create_payment();每种支付方式对应一个具体工厂(AlipayFactoryWechatFactory),各自实现该方法返回对应实例。

企业黄页模块 for PHPCMS9 GBK 正式版
企业黄页模块 for PHPCMS9 GBK 正式版

PHPCMS V9采用OOP(面向对象)方式进行基础运行框架搭建。模块化开发方式做为功能开发形式。框架易于功能扩展,代码维护,优秀的二次开发能力,可满足所有网站的应用需求。 PHPCMS V9企业黄页主要特色1、模型自定义,支持模型添加、修改、删除、导出、导入功能;2、模型字段自定义,支持模型字段添加、修改、删除、禁用操作;3、分类无限添加,支持批量多级添加;4、新增附件字段功能,实现相同模型,不

下载

立即学习Python免费学习笔记(深入)”;

  • 业务代码只需依赖抽象工厂,运行时传入具体工厂类型
  • 新增支付方式只需新增子类 + 新增对应工厂类,无需改动原有工厂逻辑
  • 适合产品族结构清晰、未来扩展频繁的系统

抽象工厂:用于多产品族组合

当系统需要创建一组相关或相互依赖的对象时使用(例如:一套 UI 组件包含 Button、Checkbox、Dialog,且要支持 Windows / macOS 两套风格)。抽象工厂定义创建多个产品的方法(如 create_button()create_checkbox()),每个具体工厂实现整套创建逻辑。

  • Python 中常用模块级函数或配置驱动替代重型抽象工厂
  • 实际项目中更倾向用依赖注入容器(如 dependency-injector 库)或工厂注册表(dict 映射字符串到类)来简化实现
  • 避免过度设计:只有明确存在“产品族”概念且切换成本高时才引入

实用建议与常见优化

在 Python 中落地工厂模式不必拘泥于经典结构,关键是解决实际问题:

  • typing.Protocol 定义行为契约,比继承抽象基类更灵活
  • 工厂可配合 functools.singledispatch 实现基于参数类型的自动分发
  • 利用 __subclasses__() 动态发现所有子类,实现免注册的自动工厂
  • 配置驱动场景下,直接用 JSON/YAML 描述类型+参数,工厂按需导入并实例化,提升可维护性

不复杂但容易忽略:工厂返回的对象最好保持接口一致,初始化差异尽量收口到工厂内部,避免调用方再做类型判断。

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
json数据格式
json数据格式

JSON是一种轻量级的数据交换格式。本专题为大家带来json数据格式相关文章,帮助大家解决问题。

454

2023.08.07

json是什么
json是什么

JSON是一种轻量级的数据交换格式,具有简洁、易读、跨平台和语言的特点,JSON数据是通过键值对的方式进行组织,其中键是字符串,值可以是字符串、数值、布尔值、数组、对象或者null,在Web开发、数据交换和配置文件等方面得到广泛应用。本专题为大家提供json相关的文章、下载、课程内容,供大家免费下载体验。

546

2023.08.23

jquery怎么操作json
jquery怎么操作json

操作的方法有:1、“$.parseJSON(jsonString)”2、“$.getJSON(url, data, success)”;3、“$.each(obj, callback)”;4、“$.ajax()”。更多jquery怎么操作json的详细内容,可以访问本专题下面的文章。

331

2023.10.13

go语言处理json数据方法
go语言处理json数据方法

本专题整合了go语言中处理json数据方法,阅读专题下面的文章了解更多详细内容。

82

2025.09.10

if什么意思
if什么意思

if的意思是“如果”的条件。它是一个用于引导条件语句的关键词,用于根据特定条件的真假情况来执行不同的代码块。本专题提供if什么意思的相关文章,供大家免费阅读。

846

2023.08.22

js 字符串转数组
js 字符串转数组

js字符串转数组的方法:1、使用“split()”方法;2、使用“Array.from()”方法;3、使用for循环遍历;4、使用“Array.split()”方法。本专题为大家提供js字符串转数组的相关的文章、下载、课程内容,供大家免费下载体验。

739

2023.08.03

js截取字符串的方法
js截取字符串的方法

js截取字符串的方法有substring()方法、substr()方法、slice()方法、split()方法和slice()方法。本专题为大家提供字符串相关的文章、下载、课程内容,供大家免费下载体验。

220

2023.09.04

java基础知识汇总
java基础知识汇总

java基础知识有Java的历史和特点、Java的开发环境、Java的基本数据类型、变量和常量、运算符和表达式、控制语句、数组和字符串等等知识点。想要知道更多关于java基础知识的朋友,请阅读本专题下面的的有关文章,欢迎大家来php中文网学习。

1563

2023.10.24

JavaScript浏览器渲染机制与前端性能优化实践
JavaScript浏览器渲染机制与前端性能优化实践

本专题围绕 JavaScript 在浏览器中的执行与渲染机制展开,系统讲解 DOM 构建、CSSOM 解析、重排与重绘原理,以及关键渲染路径优化方法。内容涵盖事件循环机制、异步任务调度、资源加载优化、代码拆分与懒加载等性能优化策略。通过真实前端项目案例,帮助开发者理解浏览器底层工作原理,并掌握提升网页加载速度与交互体验的实用技巧。

59

2026.03.06

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
最新Python教程 从入门到精通
最新Python教程 从入门到精通

共4课时 | 22.5万人学习

Django 教程
Django 教程

共28课时 | 4.9万人学习

SciPy 教程
SciPy 教程

共10课时 | 1.9万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号