

新闻资讯
技术学院工厂模式是创建型设计模式,通过工厂封装对象创建逻辑,避免直接调用类构造器,提升灵活性与可维护性;适用于多类型对象创建场景,如文件解析、支付渠道等,常用简单工厂和工厂方法两种形式。
工厂模式是一种创建型设计模式,它把对象的实例化过程从使用方中分离出来,让代码更灵活、更易维护。核心思想是:不直接用 class() 创建对象,而是通过一个“工厂”来决定创建哪个具体类的实例。
当你的代码中出现大量 if-elif-else 判断来决定创建哪种对象时,就该考虑工厂模式了。比如处理不同文件格式(JSON、CSV、XML),或对接多个支付渠道(支付宝、微信、银联),硬编码判断会让逻辑散落、难以扩展。
Python 中最常用的是简单工厂(非 GoF 正式模式,但够用)和工厂方法(更规范)。抽象工厂适合多产品族场景(如不同操作系统的 UI 组件),日常开发较少见。
以日志处理器为例:支持输出到控制台、文件、网络等不同后端。
from abc import ABC, abstractmethodclass 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 更易维护。