Sobes.tech
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 instancia
    

    Luego 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.