Niño libro perdido
Necesario después de leer
2
minutoLa lectura rápida solo toma 1 minuto
Cuando hablamos del patrón singleton, podemos imaginar un restaurante muy especial, este restaurante tiene una sola mesa, no importa cuántas personas vengan a cenar, solo pueden sentarse en esta mesa. Esta tabla es una instancia única del restaurante, lo que garantiza que solo exista una mesa en todo el restaurante.
En Python, el patrón singleton se utiliza para garantizar que una clase tenga solo una instancia y proporcione un punto de acceso global a esa instancia. Esto es útil en determinadas situaciones, como cuando necesita compartir recursos o compartir el estado entre varios objetos.
Entendamos los principios del patrón singleton a través de un ejemplo. Supongamos que tenemos una clase llamada Base de datos que representa una conexión a una base de datos. Queremos tener solo una instancia de conexión de base de datos en toda la aplicación.
class Database:
_instance = None
def __new__(cls):
if cls._instance is None:
cls._instance = super().__new__(cls)
return cls._instance
En este ejemplo, utilizamos el método especial __new__ en Python para controlar el proceso de creación de objetos. El método __new__ se llama antes de crear una instancia del objeto y es responsable de crear y devolver una instancia del objeto.
En la clase Base de datos, usamos una variable de clase _instancia para contener la instancia única. En el método __new__, verificamos si _instance es Ninguno; de ser así, creamos una nueva instancia y la asignamos a _instance; de lo contrario, devolvemos la instancia existente directamente.
Ahora, no importa en qué parte del código creemos el objeto Base de datos, se devolverá la misma instancia.
db1 = Database()
db2 = Database()
# 输出: True
print(db1 is db2)
Esto se debe a que el método __new__ de la clase Base de datos garantiza que solo exista una instancia. No importa cuántos objetos de base de datos creemos, todos apuntan a la misma instancia.
A través de esta metáfora y ejemplo de código, podemos comprender mejor los principios del patrón singleton. Garantiza que solo exista una instancia en toda la aplicación, al igual que solo hay una mesa en un restaurante.
Cabe señalar que el patrón singleton no es una panacea y puede conducir a un estado global y un código estrechamente acoplado. Por lo tanto, cuando utilice el patrón singleton, debe considerar cuidadosamente su idoneidad y asegurarse de que cumpla con los requisitos de diseño.