Patrón de diseño Singleton


El Singleton es quizás el más sencillo de los patrones que se presentan en el catálogo del GoF (disponible en el libro Patrones de Diseño [GoF95] y analizado previamente en "Patrones y Antipatrones: una introducción" [Welicki05]). Es también uno de los patrones más conocidos y utilizados. Su propósito es asegurar que sólo exista una instancia de una clase.



En este artículo analizaremos en profundidad este patrón, exponiendo sus fortalezas y debilidades. Presentaremos distintas opciones de implementación en C#, haciendo hincapié en su correcto funcionamiento en entornos multihilos. Luego relacionaremos los conceptos de este artículo con los patrones de fabricación que hemos estudiado en la entrega anterior. Finalmente, mostraremos un ejemplo de implementación de este patrón para crear una caché de parámetros de configuración. Restringe la instanciación de una clase o valor de un tipo a un solo objeto.
Ejemplos de Patrón de diseño Singleton.
 
Ejemplo 1 -  Implementación del GoF

public class Singleton
{
   private static Singleton instance = null;

   private Singleton() {}

   public static Singleton GetInstance()
   {
     if (instance == null)
        instance = new Singleton();

     return instance;
   }
}





Ejemplo 2 - Modificación del Ejemplo del GoF usando Propiedades


public sealed class Singleton
      {
            private static volatile Singleton instance;
            private static object syncRoot = new Object();
            private Singleton()
            {
                  System.Windows.Forms.MessageBox.Show("Nuevo Singleton");
            }
            public static Singleton GetInstance
            {
                  get
                  {
                        if (instance == null)
                        {
                             lock(syncRoot)
                             {
                                   if (instance == null)
                                         instance = new Singleton();
                             }
                        }
                        return instance;
                  }
            }
       }
Compartir en Google Plus

0 comentarios :

Publicar un comentario