Python设计模式-工厂模式(Factory)

工厂模式(Factory)

工厂用于创建其他对象,这些对象往往从属于一个相同的范围,并且在系统中扮演相同的角色。

工厂方法:定义一个用于创建对象的接口函数,可以控制实例化哪一个具体的类。

优点:创建对象时,调用者只需要根据定义好的接口,查询对象名即可,具体对象创建的过程由工厂完成。

缺点:有新的需要创建的对象时,需要增加具体的对象类和对应的工厂实现,维护起来比较麻烦。

返回 Python设计模式-outline

典型例子:

  • 不同模式的数据格式读写;
  • 不同模式的数据库访问;
  • 不同协议的服务器连接器;

示例

# 一个不同格式文件读取的例子
import json
import pickle
from abc import abstractmethod

class BaseFileHandler:
    @abstractmethod
    def load_from_fileobj(self, file, **kwargs):
        pass
  
    @abstractmethod
    def dump_to_fileobj(self, obj, file, **kwargs):
        pass

class JsonHandler(BaseFileHandler):
    def load_from_fileobj(self, file):
        return json.load(file)

    def dump_to_fileobj(self, obj, file, **kwargs):
        json.dump(obj, file, **kwargs)

class PickleHandler(BaseFileHandler):
    def load_from_fileobj(self, file, **kwargs):
        return pickle.load(file, **kwargs)

    def dump_to_fileobj(self, obj, file, **kwargs):
        kwargs.setdefault('protocol', 2)
        pickle.dump(obj, file, **kwargs)

# 工厂模式接口函数
def get_file_handler(ext: str) -> BaseFileHandler:
    handlers = {
        'json': JsonHandler,
        'pkl': PickleHandler
    }
    return handlers[ext]()
posted @   坦先生的AI资料室  阅读(718)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 阿里最新开源QwQ-32B,效果媲美deepseek-r1满血版,部署成本又又又降低了!
· SQL Server 2025 AI相关能力初探
· AI编程工具终极对决:字节Trae VS Cursor,谁才是开发者新宠?
· 开源Multi-agent AI智能体框架aevatar.ai,欢迎大家贡献代码
· Manus重磅发布:全球首款通用AI代理技术深度解析与实战指南
点击右上角即可分享
微信分享提示