0

0

Python工厂模式教程_解耦对象创建逻辑

冷炫風刃

冷炫風刃

发布时间:2026-01-11 20:29:09

|

362人浏览过

|

来源于php中文网

原创

工厂模式是创建型设计模式,通过工厂封装对象创建逻辑,避免直接调用类构造器,提升灵活性与可维护性;适用于多类型对象创建场景,如文件解析、支付渠道等,常用简单工厂和工厂方法两种形式。

python工厂模式教程_解耦对象创建逻辑

什么是工厂模式

工厂模式是一种创建型设计模式,它把对象的实例化过程从使用方中分离出来,让代码更灵活、更易维护。核心思想是:不直接用 class() 创建对象,而是通过一个“工厂”来决定创建哪个具体类的实例。

为什么需要工厂模式

当你的代码中出现大量 if-elif-else 判断来决定创建哪种对象时,就该考虑工厂模式了。比如处理不同文件格式(JSON、CSV、XML),或对接多个支付渠道(支付宝微信、银联),硬编码判断会让逻辑散落、难以扩展。

  • 新增一种类型,只需加一个类 + 注册到工厂,不用改原有调用逻辑
  • 调用方完全不知道具体类名,只依赖统一接口,降低耦合
  • 便于单元测试——可以轻松替换为 Mock 工厂返回测试对象

简单工厂 vs 工厂方法 vs 抽象工厂

Python 中最常用的是简单工厂(非 GoF 正式模式,但够用)和工厂方法(更规范)。抽象工厂适合多产品族场景(如不同操作系统的 UI 组件),日常开发较少见。

  • 简单工厂:一个函数或类,根据参数返回不同实例。适合业务初期,结构轻量
  • 工厂方法:定义创建对象的抽象方法,由子类决定实例化哪个类。适合有明确产品继承体系的场景
  • Python 动态特性让抽象工厂略显冗余,通常用字典映射 + 简单工厂就能覆盖大部分需求

动手写一个实用的简单工厂

以日志处理器为例:支持输出到控制台、文件、网络等不同后端

神笔马良
神笔马良

神笔马良 - AI让剧本一键成片。

下载

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

from abc import ABC, abstractmethod

class LogHandler(ABC): @abstractmethod def write(self, message): ...

class ConsoleHandler(LogHandler): def write(self, message): print(f"[CONSOLE] {message}")

class FileHandler(LogHandler): def init(self, filename): self.filename = filename def write(self, message): with open(self.filename, "a") as f: f.write(f"[FILE] {message}\n")

class LogFactory: _handlers = { "console": ConsoleHandler, "file": lambda f: FileHandler(f) }

@classmethod
def get_handler(cls, handler_type: str, **kwargs):
    handler_class = cls._handlers.get(handler_type)
    if not handler_class:
        raise ValueError(f"Unknown handler: {handler_type}")
    return handler_class(**kwargs) if callable(handler_class) else handler_class()

使用

logger = LogFactory.get_handler("file", filename="app.log") logger.write("User logged in")

注意:lambda 或闭包用于带参构造,避免工厂类变得臃肿;字典注册比长串 if 更易维护。

相关专题

更多
python开发工具
python开发工具

php中文网为大家提供各种python开发工具,好的开发工具,可帮助开发者攻克编程学习中的基础障碍,理解每一行源代码在程序执行时在计算机中的过程。php中文网还为大家带来python相关课程以及相关文章等内容,供大家免费下载使用。

745

2023.06.15

python打包成可执行文件
python打包成可执行文件

本专题为大家带来python打包成可执行文件相关的文章,大家可以免费的下载体验。

634

2023.07.20

python能做什么
python能做什么

python能做的有:可用于开发基于控制台的应用程序、多媒体部分开发、用于开发基于Web的应用程序、使用python处理数据、系统编程等等。本专题为大家提供python相关的各种文章、以及下载和课程。

758

2023.07.25

format在python中的用法
format在python中的用法

Python中的format是一种字符串格式化方法,用于将变量或值插入到字符串中的占位符位置。通过format方法,我们可以动态地构建字符串,使其包含不同值。php中文网给大家带来了相关的教程以及文章,欢迎大家前来阅读学习。

617

2023.07.31

python教程
python教程

Python已成为一门网红语言,即使是在非编程开发者当中,也掀起了一股学习的热潮。本专题为大家带来python教程的相关文章,大家可以免费体验学习。

1260

2023.08.03

python环境变量的配置
python环境变量的配置

Python是一种流行的编程语言,被广泛用于软件开发、数据分析和科学计算等领域。在安装Python之后,我们需要配置环境变量,以便在任何位置都能够访问Python的可执行文件。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

547

2023.08.04

python eval
python eval

eval函数是Python中一个非常强大的函数,它可以将字符串作为Python代码进行执行,实现动态编程的效果。然而,由于其潜在的安全风险和性能问题,需要谨慎使用。php中文网给大家带来了相关的教程以及文章,欢迎大家前来学习阅读。

577

2023.08.04

scratch和python区别
scratch和python区别

scratch和python的区别:1、scratch是一种专为初学者设计的图形化编程语言,python是一种文本编程语言;2、scratch使用的是基于积木的编程语法,python采用更加传统的文本编程语法等等。本专题为大家提供scratch和python相关的文章、下载、课程内容,供大家免费下载体验。

705

2023.08.11

c++主流开发框架汇总
c++主流开发框架汇总

本专题整合了c++开发框架推荐,阅读专题下面的文章了解更多详细内容。

80

2026.01.09

热门下载

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

精品课程

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

共4课时 | 0.6万人学习

Django 教程
Django 教程

共28课时 | 3万人学习

SciPy 教程
SciPy 教程

共10课时 | 1.1万人学习

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

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