4: Cuarto patrón de diseño - FranzBurneo/Patrones-de-dise-o GitHub Wiki

Singleton

Singleon pertenece a los patrones de diseño de creación, este patrón permite asegurarse que la clase tenga una sola instancia, al tiempo que proporciona un punto de acceso global a esta instancia.

Problema

La aplicación tiene la necesidad de usar una y solo una instancia de un objeto. Además, la inicialización diferida y el acceso global son necesarios.

Analogía del mundo real

El gobierno es un excelente ejemplo del patrón Singleton. Un país puede tener un solo gobierno oficial. Independientemente de las identidades personales de los individuos que forman gobiernos, el título, “El Gobierno de X”, es un punto de acceso global que identifica al grupo de responsables.

Estructura

Se busca hacer que la clase de la instancia sea la única responsable de acceder e inicializar. La instancia única es un atributo estático privado. La función de acceso es un método estático público.

Ejemplo

Tenemos que asegurarnos de que una solo clase tenga la instancia y nos proporcione un punto global de acceso a ella

class Singleton(type):

Definimos una operación de instancia que permita a los clientes acceder a nuestra única instancia

def __init__(cls, name, bases, attrs, **kwargs):

    super().__init__(name, bases, attrs)
    cls._instance = None

def __call__(cls, *args, **kwargs):

    if cls._instance is None:
        cls._instance = super().__call__(*args, **kwargs)
    return cls._instance

Clase de ejemplo

class MyClass(metaclass=Singleton):

pass

def main():

m1 = MyClass()
m2 = MyClass()
assert m1 is m2

if __name__ == "__main__":

main()

Bibliografía

https://sourcemaking.com/design_patterns/singleton