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 =
No hay comentarios.:
Publicar un comentario