Singleton
Propósito
Asegurar que una clase solo tenga una instancia y proporcionar un punto de acceso global a ella.
Explicación
Ejemplo del mundo real
Solo puede haber una torre de marfil donde los magos estudian su magia. La misma torre de marfil encantada
siempre es utilizada por los magos. La torre de marfil aquí es un singleton.
En otras palabras
Asegura que solo se cree un objeto de una clase en particular.
Wikipedia dice
En ingeniería de software, el patrón singleton es un patrón de diseño de software que limita la
instanciación de una clase a un solo objeto. Esto es útil cuando se necesita exactamente un objeto para
coordinar acciones en todo el sistema.
Ejemplo programático
Joshua Bloch, Effective Java 2nd Edition p.18
Un enum type con un solo elemento es la mejor forma de implementar un singleton
public enum EnumIvoryTower {
INSTANCE
}
Luego,
var enumIvoryTower1 = EnumIvoryTower.INSTANCE;
var enumIvoryTower2 = EnumIvoryTower.INSTANCE;
LOGGER.info("enumIvoryTower1={}", enumIvoryTower1);
LOGGER.info("enumIvoryTower2={}", enumIvoryTower2);
La salida de la consola
enumIvoryTower1=com.iluwatar.singleton.EnumIvoryTower@1221555852
enumIvoryTower2=com.iluwatar.singleton.EnumIvoryTower@1221555852
Diagrama de clases
Aplicabilidad
Utilice el patrón Singleton cuando:
- Debe haber exactamente una instancia de una clase, y debe ser accesible para los clientes desde un punto de acceso conocido
- Cuando la única instancia debe ser extensible mediante herencia, y los clientes deben poder usar una instancia extendida sin modificar su código
Algunos casos típicos para Singleton:
- La clase logging
- Gestionar una conexión a una base de datos
- Gestor de archivos
Usos conocidos
Consecuencias
- Viola el Principio de Responsabilidad Única (Single Responsibility Principle - SRP) al controlar su creación y ciclo de vida.
- Fomenta el uso de una instancia compartida globalmente, lo que impide que un objeto y los recursos utilizados por este objeto se liberen.
- Crea un código fuertemente acoplado. Los clientes del Singleton se vuelven difíciles de probar.
- Hace casi imposible hacer subclases de un Singleton.