Middle
¿Qué sabes sobre el patrón Singleton?
sobes.tech AI
Respuesta de la IA
El patrón Singleton garantiza que una clase tenga solo una instancia y proporciona un punto de acceso global a esa instancia.
Se aplica cuando:
- Es necesario gestionar el acceso a un recurso (por ejemplo, base de datos, sistema de archivos).
- Solo se necesita una instancia de un objeto de un tipo determinado en el sistema.
La implementación en Python puede basarse en:
-
El método
__new__: Sobrescribimos__new__para que siempre devuelva la misma instancia.class Singleton: _instance = None def __new__(cls): if cls._instance is None: cls._instance = super().__new__(cls) return cls._instance # Métodos y atributos adicionales de la clase -
Decorador de clase: Creamos una función decoradora que gestiona la creación de la instancia.
def singleton(cls): instances = {} def get_instance(*args, **kwargs): if cls not in instances: instances[cls] = cls(*args, **kwargs) return instances[cls] return get_instance @singleton class MySingleton: def __init__(self, value): self.value = value # Métodos adicionales -
Módulo: Python importa módulos solo una vez, lo que se puede usar para crear un singleton.
# singleton_module.py class MySingleton: pass # Definición de la clase instance = MySingleton() # Creación de la única instanciaLuego se importa con
from singleton_module import instance.
Ventajas:
- Acceso controlado a la única instancia.
- Ahorro de recursos al trabajar con objetos pesados.
Desventajas:
- Puede complicar las pruebas (debido al estado global).
- Viola el principio de responsabilidad única.
- En entornos multihilo requiere sincronización para una inicialización segura.