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。