Junior
¿Qué es el patrón Singleton?
sobes.tech AI
Respuesta de la IA
Singleton es un patrón de diseño creacional que garantiza que una clase tenga solo una instancia y proporciona un punto de acceso global a esa instancia. Se aplica cuando se necesita un objeto único para gestionar un recurso o estado compartido.
Principio de funcionamiento:
- Constructor privado para prohibir la creación de nuevas instancias mediante
new. - Campo estático privado para almacenar la única instancia.
- Método estático público que proporciona acceso a la instancia:
- Verifica si la instancia ha sido creada.
- Si no, la crea y la guarda en el campo estático.
- Retorna la instancia creada o existente.
Ejemplo en Java:
public class Singleton {
// Campo estático privado para almacenar la instancia
private static Singleton instance;
// Constructor privado
private Singleton() {
// Inicialización si es necesaria
}
// Método estático público para obtener la instancia
public static Singleton getInstance() {
// Verificación de null para inicialización perezosa
if (instance == null) {
// Sincronización para seguridad en entornos multihilo
synchronized (Singleton.class) {
// Verificación doble en el bloque sincronizado
if (instance == null) {
instance = new Singleton();
}
}
}
return instance;
}
// Lógica de negocio del singleton
public void doSomething() {
System.out.println("Singleton instance is doing something.");
}
}
Aplicación en QA Automation:
- Gestión de configuraciones de pruebas (archivos de propiedades, variables de entorno).
- Instancia única del driver del navegador (WebDriver) cuando todos los tests usan el mismo driver.
- Gestor de logs o reportes.
- Pool de conexiones a la base de datos.
Ventajas:
- Garantiza la existencia de solo una instancia.
- Proporciona un punto de acceso conveniente a la instancia.
- Inicialización perezosa (se crea solo en la primera solicitud).
Desventajas:
- Puede ocultar dependencias.
- Dificulta las pruebas unitarias, ya que el singleton es un estado global.
- Viola el principio de responsabilidad única (la clase puede ser responsable de su lógica y de gestionar su ciclo de vida).
- Puede haber problemas con la concurrencia si no se implementa correctamente.