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

什么是工厂模式
工厂模式是一种创建型设计模式,它把对象的创建过程封装起来,让调用方不直接使用 class() 实例化,而是通过一个统一的接口(工厂)来获取对象。这样做的核心好处是:解耦对象创建逻辑与业务逻辑,便于扩展新类型、统一管理初始化参数、隐藏复杂构造细节。
简单工厂:适合类型不多的场景
简单工厂不是 GoF 23 种标准模式之一,但最易理解,常作为入门实践。它用一个函数或类方法,根据输入参数返回不同子类实例。
- 定义一个基类(如 Payment),声明通用接口(如 pay())
- 实现多个子类(Alipay、WechatPay、CardPay)
- 编写工厂函数 create_payment(method: str) -> Payment,内部用 if/elif 或字典映射决定返回哪个实例
优点是代码简洁;缺点是新增支付方式时需修改工厂函数,违反开闭原则。
工厂方法:支持动态扩展子类
将“创建对象”的责任下放到子类。定义一个抽象工厂类(如 PaymentFactory),声明抽象方法 create_payment();每种支付方式对应一个具体工厂(AlipayFactory、WechatFactory),各自实现该方法返回对应实例。
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 描述类型+参数,工厂按需导入并实例化,提升可维护性
不复杂但容易忽略:工厂返回的对象最好保持接口一致,初始化差异尽量收口到工厂内部,避免调用方再做类型判断。









