Sobes.tech
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:

  1. Constructor privado para prohibir la creación de nuevas instancias mediante new.
  2. Campo estático privado para almacenar la única instancia.
  3. 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.