domingo, 10 de junio de 2018


METODO DE SINGLETON

El patrón de diseño que permite restringir la creación de objetos pertenecientes a una clase o el valor de un tipo a un único objeto. Su intención consiste en garantizar que una clase solo tenga una instancia y proporcionar un punto de acceso global a ella.
El patrón singleton se implementa creando en nuestra clase un método que crea una instancia del objeto solo si todavía no existe alguna. Para asegurar que la clase no puede ser instanciada nuevamente se regula el alcance del constructor (con modificadores de acceso como protegido o privado).
La instrumentación del patrón puede ser delicada en programas con múltiples hilos de ejecución. Si dos hilos de ejecución intentan crear la instancia al mismo tiempo y esta no existe todavía, solo uno de ellos debe lograr crear el objeto. La solución clásica para este problema es utilizar exclusión mutua en el método de creación de la clase que implementa el patrón.
Garantiza que una clase sólo tenga una instancia y proporciona un punto de acceso global a ella.

Singleton
  • Define una operación Instancia que permite que los clientes accedan a su única instancia. Instancia es una operación de clase (static en C# y shared en VB .NET).
  • Puede ser responsable de crear su única instancia.

Usar cuando:
·         Haya  exactamente una instancia de una clase y ésta deba ser accesible a los clientes desde un punto de acceso conocido.
·         La única instancia debería ser extensible mediante herencia y los clientes deberían ser capaces de utilizar una instancia extendida sin modificar su código.


Consecuencias
·         Acceso controlado a la única instancia. Puede tener un control estricto sobre cómo y cuándo acceden los clientes a la instancia.
·         Espacio de nombres reducido. El patrón Singleton es una mejora sobre las variables globales.
·         Permite el refinamiento de operaciones y la representación. Se puede crear una subclase de Singleton.
·         Permite un número variable de instancias. El patrón hace que sea fácil cambiar de opinión y permitir más de una instancia de la clase Singleton.
·         Más flexible que las operaciones de clase (static en C#, Shared en VB .NET).

Singleton y los Patrones de Fabricación
En el libro del GoF se establece también una relación entre Abstract Factory y Singleton. La relación es que "una fábrica concreta suele ser un Singleton" [GoF95]. 
Aquí  se muestra la relación entre estos patrones.

.Fábrica Concreta como Singleton

Se presenta la relación entre estos dos patrones diciendo que "una fábrica concreta suele ser un Singleton". El ejemplo de código a continuación muestra cómo implementar esta relación. En este caso, hemos transformado a la Fábrica Concreta de elementos de UI de Windows en un Singleton (esta clase es parte del ejemplo de implementación de Abstract Factory del artículo Patrones de Fabricación: Fábricas de Objetos [Welicki05b])

public class SingletonWindowsWidgetFactory
{   
   private static volatile SingletonWindowsWidgetFactory instance;    
   private static readonly object padlock = new object();

   private SingletonWindowsWidgetFactory() {}

   public static SingletonWindowsWidgetFactory Instance
   {
     get
     {
        if (instance == null)
        {
           lock(padlock)
           {   
              if (instance == null)
                instance = new SingletonWindowsWidgetFactory();
           }
        }

        return instance;
     }
   }

   public Window CreateWindow()
   {
     return new WindowsWindow();
   }

   public Scrollbar CreateScrollbar()
   {
     return new WindowsScrollbar();
   }
}


 Implementación de una Fábrica Concreta combinada con Singleton
Los métodos de creación de la fábrica concreta del ejemplo presentado arriba (SingletonWindowsWidgetFactory) se invocan de la siguiente forma:

Scrollbar theScrollbar =
        SingletonWindowsWidgetFactory.Instance.CreateScrollbar();

Window theWindow =
        SingletonWindowsWidgetFactory.Instance.CreateWindow();

Archivo en PDF


No hay comentarios.:

Publicar un comentario