对象工厂实现插件系统解耦的关键是接口抽象、自动注册与延迟实例化:调用方仅依赖接口,插件通过装饰器注册至全局表,工厂按需实例化并注入上下文,支持热加载、校验及生命周期管理。

用对象工厂实现高度解耦的插件系统,关键不在“造对象”,而在“不认对象”——调用方只知接口,不知类名;插件加载不碰 new,也不写 if-else 分支;新增插件无需改工厂、不重编译、不重启进程。核心靠三步:接口抽象 + 自动注册 + 延迟实例化。
定义统一插件协议,屏蔽具体实现
所有插件必须实现同一个抽象基类或接口,它只暴露行为契约,不暴露构造细节。比如:
- 声明
Plugin抽象类,含name、version、execute(config: dict)等标准方法 - 禁止插件类带参数构造器(或强制提供无参构造 +
setup()初始化钩子) - 接口中避免暴露路径、模块名、配置文件等环境强相关字段,改由工厂注入
用注册机制替代硬编码映射
工厂本身不维护插件列表,而是从外部注册表动态发现插件。推荐装饰器注册方式:
- 每个插件类加
@register_plugin("data_cleaner")装饰器 - 装饰器将类自动存入全局字典
PLUGIN_REGISTRY["data_cleaner"] = DataCleaner - 工厂的
create(name, **kwargs)方法只查表、实例化、返回接口类型对象 - 注册表可扩展支持 YAML/JSON 配置驱动,如读取
plugins.yaml自动导入模块并注册
按需实例化 + 上下文隔离
工厂不预创建所有插件,而是在首次请求时才实例化,并支持依赖注入和上下文绑定:
- 实例化时传入运行时上下文,如
create("notifier", channel="slack", timeout=5) - 插件内部不直接访问全局配置,而是通过工厂注入的
config对象获取参数 - 对有状态插件(如带连接池的日志发送器),工厂可封装为单例或作用域实例(request-scoped)
- 支持插件生命周期钩子:
on_load()、on_unload(),由工厂统一触发
插件热加载与校验机制
真正解耦意味着插件可独立开发、测试、部署。工厂需配套轻量级校验与加载能力:
- 加载前检查插件是否实现必需接口、版本兼容性、元数据完整性
- 支持从指定目录扫描
*_plugin.py文件,自动 import 并触发注册 - 异常插件加载失败时,仅跳过该插件,不影响其他插件可用性
- 提供
list_plugins()和get_plugin_info(name)等调试接口,便于运维观测










