Python 设计模式实战:单例与工厂模式详解
在软件开发领域,设计模式(Design Pattern)是一套被广泛认可的解决方案,用于解决特定情境下重复出现的软件设计问题。它们提供了一种标准化的语言,帮助开发者提高代码的可读性、可维护性和可扩展性。Python 作为一种高级动态编程语言,凭借其简洁的语法和强大的元编程能力,为设计模式的实现提供了多种灵活的方式。
本文将深入探讨两种最常用的创建型设计模式:单例模式(Singleton Pattern)和工厂模式(Factory Pattern)。我们将通过具体的 Python 代码示例,分析它们的实现原理、适用场景以及潜在陷阱,帮助你编写更加优雅和健壮的代码。
一、单例模式(Singleton Pattern)
1. 模式定义
单例模式确保一个类在整个应用程序生命周期中只有一个实例,并提供一个全局访问点。这种模式常用于需要共享资源的场景,例如数据库连接池、日志记录器、配置管理器等。
2. Python 中的单例实现
在 Python 中,实现单例模式有多种方式,从隐式的模块级单例到显式的类控制。
2.1 模块级单例(默认行为)
Python 的模块系统天然支持单例特性。当一个模块被导入时,它只会被执行一次,其中的全局变量或对象在后续导入中会复用同一个引用。
# logger.py
import logging
class Logger:
def __init__(self):
self.log = []
def add_log(self, message):
self.log.append(message)
def print_log(self):
for message in self.log:
print(message)
# 在全局作用域实例化
logger = Logger()
在其他模块中直接 import logger 即可使用 logger.logger 实例。由于模块加载机制,这保证了唯一性。这种方式简单高效,是 Python 中最推荐的'隐式'单例写法。
2.2 类级别单例(new 方法)
如果需要更严格的控制,或者需要在类内部管理状态,可以使用 __new__ 方法重写对象的创建过程。
import threading
class SingletonLogger:
_instance = None
_lock = threading.Lock()
def __new__(cls):
cls._instance :
cls._lock:
cls._instance :
cls._instance = ().__new__(cls)
cls._instance.log = []
cls._instance
():
.log.append(message)
():
message .log:
(message)


