Skip to article frontmatterSkip to article content
Site not loading correctly?

This may be due to an incorrect BASE_URL configuration. See the MyST Documentation for reference.

Singleton

Universidad Nacional de Rio Negro - Sede Andina

Definición

El patrón Singleton (Instancia Única) es un patrón de diseño creacional que garantiza que una clase tenga una única instancia y proporciona un punto de acceso global a ella.

Restringe la creación de objetos de una clase a una sola instancia, lo cual es útil cuando se necesita un objeto único para coordinar acciones en todo el sistema, como un gestor de configuración o un pool de conexiones.

Origen e Historia

Formalizado por el GoF en 1994, el Singleton es quizás el patrón más conocido (y a veces el más abusado). Su origen se remonta a la necesidad de gestionar recursos compartidos de hardware o software que, por su naturaleza, no pueden o no deben tener múltiples controladores (como una cola de impresión o un sistema de logs).

Motivacion

La necesidad del Singleton surge cuando:

// Motivación: Acceso centralizado y único
public class Logger {
    // Si cada clase crea su propio Logger, 
    // ¿quién coordina la escritura en el archivo único?
}

Contexto

Se aplica en situaciones donde:

Cuando aplica

Cuando no aplica

Consecuencias de su uso

Positivas

Negativas

Alternativas

Estructura

Diagramas

Diagrama de Clases

Diagrama de Secuencia

Ejemplos

/**
 * Implementación segura para hilos (Thread-safe) en Java.
 */
public class DatabaseConnector {
    private static volatile DatabaseConnector instancia;
    
    private DatabaseConnector() {
        // Conexión costosa aquí
    }
    
    public static DatabaseConnector getInstancia() {
        if (instancia == null) {
            synchronized (DatabaseConnector.class) {
                if (instancia == null) {
                    instancia = new DatabaseConnector();
                }
            }
        }
        return instancia;
    }
}

Ejercicios

Resumen

El Singleton es una herramienta potente pero peligrosa. Su simplicidad lo hace atractivo, pero su naturaleza global puede corromper la arquitectura de un sistema si se usa para ocultar dependencias. Debe reservarse para recursos que son intrínsecamente únicos en el dominio del problema.

Próximo paso

Para seguir, conviene pasar a el material siguiente, donde el recorrido continúa sobre esta base.