Se asegura de que una clase determinada sólo
tenga una única instancia y proporcione un punto de acceso a dicha instancia.
Aplicabilidad:
Estructura:
Participantes:
Implmentación
- Debe existir una única instancia de una clase, y ésta debe ser accesible a los clientes desde un punto de acceso bien conocido.
- La única instancia puede ser extendida (subclase), y los clientes deberían poder usar la instancia extendida sin modificar su código.
Estructura:
En la siguiente imagen podemos ver un diagrama UML de este patrón:
Participantes:
- Singleton: Define un método de clase que permite a los clientes acceder a la instancia única y normalmente también es la responsable de crear su única instancia.
Colaboraciones:
Los clientes acceden a la
instancia del Singleton a través de la operación definida a tal fin (instancia()).
Concecuencias:
- Acceso controlado a la instancia única.
- Reduce el espacio de nombres al evitar variables globales.
- Permite el refinamiento de operaciones y representación mediante el uso de herencia. En este caso, en lugar de tener una única instancia de ella misma tiene una instancia única de una subclase, y esta usa la instancia de la subclase con la interface de la superclase.
- Permite un número variable de instancias.
- Más flexible que las operaciones de clase.
Implmentación
- Acceso controlado a la instancia única.
- Asegurar la unicidad de la instancia de la clase.
- Extender la clase Instancia Única o Singleton:
- El método de clase instancia conoce las subclases de la jerarquía y crea la instancia deseada.
- Establecer algún mecanismo para registrar las subclases.
Patrones relacionados:
- Abstract Factory, Builder, Prototype: Única instancia de cualquiera de estos objetos o patrones