Home Assistant Fácil

Curso de Home Assistant y domótica

  • Blog
  • Soy un pardillo
  • Podcast
  • Curso Arduino
  • Curso Domótica
  • Acceder
Usted está aquí: Inicio / Tutoriales / Fragmentos / C# / Patrón singleton

Patrón singleton

Luis del Valle Hernández

El singleton es un patrón de diseño muy conocido y muy utilizado. Restringe la creación de instancias de una clase para que solo cree una instancia de la clase que lo implementa. Puede ser utilizado de forma global en aplicaciones así que su uso puede ser muy variado, desde acceder a constantes y acumuladores o contadores, hasta la gestión de parámetros de la aplicación.

En este fragmento os presentamos dos formas de crear un singleton para C#. La primera opción es un singleton en el caso más básico.

public class SingletonBasico
{
    //Propiedad y constructor privado
    private static readonly SingletonBasico instance = null;
    private SingletonBasico()
    {
    }
    
    //Propiedad publica que da acceso a la clase
    public static SingletonBasico Instance
    {
        get
        {
            if(null == instance)
                instance = new SingletonBasico();
            return instance;
        }
    }
}

Para prevenir que se acceda a través de diferentes hilos (threads) y genere dos instancias de la misma clase se puede utilizar el singleton multi-hilo (multi-thread) que precisamente hace eso, prevenir la creación de dos o más instancias de un singleton. Es una versión mejorada de la original que solo bloquea cuando se todavía no se ha creado la instancia a la clase, en los demás casos trabaja como un singleton básico. Es muy recomendable utilizar esta implementación aún sin trabajar con multi-hilos desde un inicio.

public class SingletonMultiHilo
{
    //Propiedad y constructor privado
    private static readonly SingletonMultiHilo instance = new SingletonMultiHilo();
    private static object syncRoot = new Object();
    private SingletonMultiHilo()
    {
    }
    
    public static SingletonMultiHilo Instance
    {
        get
        {
          if (instance == null) 
          {
              lock (syncRoot) 
              {
                  if (instance == null) 
                      instance = new Singleton();
              }
          }
          
          return instance;
        }
    }
}

Si quieres saber más sobre los patrones de diseño puedes ver el artículo donde hablamos de ellos o escuchar el podccast donde hablamos del patrón Modelo Vista Controlador.

NUKI SMART LOCK

Nuki Smart Lock Go, Pro o Ultra: cuál comprar y la prueba que lo decide todo

Mira chapapote, imagina la cara de tonto que se te queda cuando te gastas casi 350 pavos en una cerradura inteligente Nuki, llega a casa, la abres con … [+ info...]

slzb-06

SLZB-06U: migrar coordinador Zigbee desde Sonoff Dongle P (y por qué el Dongle E es diferente)

Vale, lo confieso: no hay nada que me dé más pereza en domótica que tener que migrar toda la red Zigbee. El típico momento en el que tu viejo … [+ info...]

Home Assistant 2026.6

Home Assistant 2026.6: dashboard inteligente, IR bidireccional y automatizaciones más claras

Llevas meses peleándote con el dashboard de Home Assistant: añadir una tarjeta requería saber de memoria el nombre de cada tipo de bloque, y al final … [+ info...]

Copyright © 2026 · Programar Fácil · Aviso legal