Optimización de código con Singleton

17/01/2006 - 11:56 por solusoft | Informe spam
Hola a todos,

tengo este código que voy repitiendo en varias clases, y quisiera saber, no
sé si será posible, si existe alguna forma de no seguir repitiendo casi
siempre el mismo código, quizá utilizando reflexión o algún otro mecanismo.

Quizá Katrib se haya inventado algo :-)

Este es el código:

private static CLASE instanciaUnica = null;
private static object lockObject = new object();

static CLASE() {}
private CLASE() {}

public static CLASE Instancia
{
get
{
if (instanciaUnica == null)
{
lock (lockObject)
{
if (instanciaUnica == null)
{
// Crear instancia de objeto
instanciaUnica = new CLASE();
}
}
}
return instanciaUnica;
}
}


Un saludo y gracias de antemano.

Preguntas similare

Leer las respuestas

#1 solusoft
17/01/2006 - 16:10 | Informe spam
Hola,

Lo de repetir código me refiero si tengo el código del Singleton que es
prácticamente salvo el nombre de clase, y tengo varias clases Singleton, por
ejemplo ahora, si quisiera cambiar la forma de hacer el Singleton, mirando su
excelente enlace, tendría que modificar todas las clases Singleton.

Yo quería saber en ese caso si hubiera alguna forma de evitarlo, pero me
imagino que no.

Si encuentra ese enlace se lo agradecería, muchas gracias por la referencia.

Saludos.

"Alejandro Mezcua" escribió:

Mostrar la cita
#2 Octavio Hernandez
19/01/2006 - 10:33 | Informe spam
Hola,

Aunque no soy Katrib me precio de haber sido su alumno, así que con ese
comentario casi me obligas a responder :-)

Mira a ver qué te parece esta solución basada en genéricos (.NET 2.0):

public static class Singleton<T> where T : new()
{
private static T instance = default(T);
private static readonly object padlock = new object();

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

Teniendo esta definición, puedes crear todos tus singletons así:

static void Main(string[] args)
{
// *** clases
Persona p = Singleton<Persona>.Instance;
p.Nombre = "Pepe";
Persona q = Singleton<Persona>.Instance;
Console.WriteLine(q.Nombre); // imprime 'Pepe'
// *** tipos valor
DateTime dt = Singleton<DateTime>.Instance;
dt = DateTime.Parse("1/1/2006");
}

Es solo una idea inicial, seguro que se puede mejorar.

Salu2 - Octavio

"solusoft" escribió en el mensaje
news:
Mostrar la cita
Ads by Google
Search Busqueda sugerida