设计模式:工厂模式、抽象工厂模式与建造者模式解析
1. 工厂模式
在处理数据提取时, JSONDataExtractor
和 XMLDataExtractor
虽有相同接口,但 parsed_data()
返回的数据处理方式并不统一,一个返回列表,另一个返回树结构。若要使用相同代码处理所有提取器,除非借助外部数据提供者提供的通用数据映射,否则不太现实。假设已有处理 XML 和 JSON 文件的通用代码,若要支持第三种格式(如 SQLite),就需要进行相应的修改。
对于是否使用工厂方法模式,有经验的 Python 开发者认为,该模式在很多情况下属于过度设计或过于复杂。Python 的动态类型和一等函数特性,常使我们能用更简单直接的方式解决工厂方法模式试图解决的问题。例如,在 Python 中可直接使用简单函数或类方法创建对象,无需单独的工厂类或函数,这样能让代码更具可读性和 Python 风格,遵循“简单优于复杂”的原则。而且,Python 对默认参数、关键字参数等特性的支持,使构造函数的扩展更具向后兼容性,减少了对单独工厂方法的需求。
以下代码展示了在 Python 中直接创建对象的方式,无需中间函数或类,让代码更 Pythonic:
if case == "json":
path = dir_path / Path("movies.json")
data = JSONDataExtractor(path).parsed_data