Patrón de diseño - Singleton
Eduardo C.
Published on:
2023-12-28
El patrón de diseño Singleton es un patrón de diseño creacional que se utiliza para garantizar que una clase solo tenga una instancia y que esa instancia sea accesible globalmente en toda la aplicación.
Casos de uso:
- La conección a una base de datos.
- La configuración de la aplicación.
Ejemplo en TypeScript:
class Singleton {
private static instance: Singleton;
private constructor() {}
public static getInstance(): Singleton {
if (!Singleton.instance) {
Singleton.instance = new Singleton();
}
return Singleton.instance;
}
public greeting() {
console.log(`Hello I'm a singleton`);
}
}
// Ejemplo de uso
const singleton1 = Singleton.getInstance();
const singleton2 = Singleton.getInstance();
console.log(singleton1 === singleton2); // true
singleton1.greeting(); // Hello I'm a singleton
singleton2.greeting(); // Hello I'm a singleton
Ejemplo en python
class Singleton:
_instance = None
def __new__(cls):
if cls._instance is None:
cls._instance = super(Singleton, cls).__new__(cls)
return cls._instance
def greeting(self):
print("Hello I'm a singleton")
# Ejemplo de uso
singleton1 = Singleton()
singleton2 = Singleton()
print(singleton1 == singleton2) # True
singleton1.greeting() # Hello I'm a singleton
singleton2.greeting() # Hello I'm a singleton
Ejemplo en go
package main
import (
"fmt"
"sync"
)
// Singleton es una estructura para nuestro Singleton.
type Singleton struct{}
// instance es la instancia privada del Singleton.
var instance *Singleton
var once sync.Once
// GetInstance devuelve la instancia del Singleton, creándola si no existe.
func GetInstance() *Singleton {
once.Do(func() {
instance = &Singleton{}
})
return instance
}
// Greeting imprime un mensaje de saludo.
func (s *Singleton) Greeting() {
fmt.Println("Hello I'm a singleton")
}
func main() {
singleton1 := GetInstance()
singleton2 := GetInstance()
fmt.Println(singleton1 == singleton2) // true
singleton1.Greeting() // Hello I'm a singleton
singleton2.Greeting() // Hello I'm a singleton
}