Ejemplo didáctico del patrón de diseño Singleton implementado en TypeScript, aplicado a una conexión de base de datos para una licorería.
src/
├── Producto.ts ← Entidad de dominio
├── BaseDeDatos.ts ← Singleton (conexión a BD)
├── index.ts ← Demo / punto de entrada
└── BaseDeDatos.test.ts ← Tests con Node assert (sin frameworks)
class BaseDeDatos {
private static instancia: BaseDeDatos | null = null; // única instancia
private constructor() { /* nadie puede hacer "new" desde afuera */ }
static obtenerInstancia(): BaseDeDatos {
if (BaseDeDatos.instancia === null) {
BaseDeDatos.instancia = new BaseDeDatos(); // se crea solo una vez
}
return BaseDeDatos.instancia;
}
}Resultado: sin importar cuántas veces llames a obtenerInstancia(),
siempre obtienes el mismo objeto → una sola conexión a la base de datos.
Requisito: tener Node.js y
ts-nodeinstalados globalmente.
# Instalar tipos de Node (solo la primera vez)
npm install
# Ejecutar la demo
cmd /c "npx ts-node src/index.ts"
# Ejecutar los tests
cmd /c "npx ts-node src/BaseDeDatos.test.ts"| # | Prueba |
|---|---|
| 1 | Siempre devuelve la misma instancia |
| 2 | La lista de productos no está vacía |
| 3 | Se puede obtener un producto por ID existente |
| 4 | Buscar un ID inexistente retorna undefined |
| 5 | Agregar un producto se refleja en ambas referencias |
Patrones de Diseño — 1er semestre 2026