设计模式在 Python 中的应用

Python 中的设计模式有其独特性

由于 Python 的动态特性,许多在 Java/C++ 中需要大量样板代码的设计模式,在 Python 中可以极其简洁地实现。

1. 单例模式(Singleton)

Python 的模块本身就是天然的单例——模块在第一次导入后会被缓存。如果需要类级别的单例:

class Singleton:
    _instance = None

    def __new__(cls, *args, **kwargs):
        if cls._instance is None:
            cls._instance = super().__new__(cls)
        return cls._instance

2. 工厂模式(Factory)

使用字典映射来替代冗长的 if-elif 链:

class PDFExporter:
    def export(self, data):
        return f"导出 PDF: {data}"

class CSVExporter:
    def export(self, data):
        return f"导出 CSV: {data}"

exporters = {
    "pdf": PDFExporter,
    "csv": CSVExporter,
}

def get_exporter(format_type):
    cls = exporters.get(format_type)
    if cls is None:
        raise ValueError(f"不支持的格式: {format_type}")
    return cls()

3. 观察者模式(Observer)

Python 标准库中的 signal 或自定义事件系统都可以用来实现观察者模式。在 Django 中,这个模式通过 signals 框架得到了广泛应用。

总结

设计模式是解决常见问题的经验总结,而不是必须遵守的教条。在 Python 中,应该利用语言的特性让实现更加简洁和 Pythonic。