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()