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ó:

Hola.

No se a qué te refieres con no seguir repitiendo el código, pero si lo que
buscas es alguna versión mejorada del patrón Singleton, aquí tienes una
discusión de posibles implementaciones.

http://www.yoda.arachsys.com/csharp/singleton.html

De esa lista, yo uso normalmente la cuarta mostrada.

Existe un artículo en MSDN que explica con detalle por qué se puede
construir de esa forma, aunque no soy capaz de encontrarlo ahora.

Un saludo,

Alejandro Mezcua
MVP .NET Compact Framework
http://www.byteabyte.net/
"solusoft" wrote in message
news:
> 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.



Respuesta Responder a este mensaje
#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:
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.
email Siga el debate Respuesta Responder a este mensaje
Ads by Google
Help Hacer una preguntaRespuesta Tengo una respuesta
Search Busqueda sugerida