En C# la forma más eficiente y segura de aplicar este patrón es la siguiente:
public sealed class Singleton
{
private Singleton() {}
public static readonly Singleton Instance = new Singleton();
}
Es segura porque es el propio compilador el encargado de asegurar el Thread-Safe en la inicialización de la clase. Es eficiente porque evitamos la pérdida de rendimiento si utilizáramos una implementación mediante la cláusula volatile aplicando, por ejemplo, otro patrón interesante: Double Checked Lock. Veamos cómo:
public sealed class Singleton
{
private Singleton() {}
private static volatile Singleton instance;
private static object syncRoot = new object();
public static Singleton Instance
{
get
{
if (Singleton.instance == null)
{
lock (syncRoot)
{
if (Singleton.instance== null)
{
Singleton.instance= new Singleton();
}
}
}
return Singleton.instance;
}
}
}
Otra implementación podría aplicarse en genéricos a partir de Framework 2.0, ya que versiones anteriores no soportan esta característica en el lenguaje.
No hay comentarios:
Publicar un comentario