Stratos: Punto de Encuentro de Desarrolladores

¡Bienvenido a Stratos!

Acceder

Foros





Singleton, Static o privada

Iniciado por bnl, 29 de Agosto de 2007, 11:00:05 PM

« anterior - próximo »

bnl

Buenas

¿La clase GestorGraficos (EngineGrafico) que recubre las Direct3D de DirectX como pensais que debe ser?
- Una clase singleton, accesible por lo tanto desde cualquier punto (simplifica muchas cosas)
- Una clase Static (Shared en VB.NET)
- Uno objeto que se declare a nivel de la clase Juego (la que contiene el bucle principal) como privada
- De otra forma

Yo en principio me inclino por hacerla singleton, pero me gustaria saber vuestra opinión.Quiza se plantearan problemas futuros al ir creciendo el proyecto.

Saludos
Mi web: http://www.brausoft.com/
No sabían que era imposible, así que lo hicieron.

RobiHm

yo singleton forever, si empiezas limitandola...
Web : Indómita
Blog : MiBlog
Evobas : Evobas
Kobox : Kobox

Alexpi

ya que estas, siempre he querido saber como son las clases singleton pero no encuentro na.. igual que los tipos de datos Line o algo asi creo que he visto alguna vez. Sabes alguna web que hablen del tema? y si es en español mejor :P :)
Juego web www.goldpiece.net

Pogacha

Depende, haciendola singleton podras hacer multiples ventanas?
Mas alla de eso no encuentro otra razón para no hacerlo así.

Vicente

En Jade la clase principal del engine (Jad) es estática aunque las que recubren DX9 nop.

El único comentario respecto a las clases estáticas es que no inicialices los atributos al declararlos sino en el constructor o vas a tener muuuuuuchos dolores de cabeza.

Un saludo!

Vicente

bnl

Cita de: "Alexpi"ya que estas, siempre he querido saber como son las clases singleton pero no encuentro na.. igual que los tipos de datos Line o algo asi creo que he visto alguna vez. Sabes alguna web que hablen del tema? y si es en español mejor :P :)

Es el patron mas famoso, hay mucha documentacion en castellano.

Paginas sobre el singleton?
Je,je. Me alegra que me hagas esa pregunta :D

en mi blog hable hace poco del tema y viene el codigo en .NET:
http://www.brausoft.com/2007/07/26/singleton-mas-legible-y-accesible-en-vbnet/
wikipedia: http://es.wikipedia.org/wiki/Singleton_%28patr%C3%B3n_de_dise%C3%B1o%29


El problema que le veo al singleton y a la clase estatica es que si en el futuro (actualmente no se da el caso) necesito por lo que sea varias instancias del gestor no podre tenerlas.


¿Vicente las que recubren a las DX9 como son?
Mi web: http://www.brausoft.com/
No sabían que era imposible, así que lo hicieron.

StraT

Este es un singleton en c#

using System;

namespace ProyectoDeSingleton
{
  class Singleton
  {
     private static Singleton singleton;
     private Singleton()
     {
        //Aquí lo que sea
     }
     public static Singleton getInstance()
     {
        if(singleton == null)
           singleton = new Singleton();
        return singleton;
     }
  }
}



Saludos!
quot;Solo hay dos cosas infinitas, el universo y la estupidez humana, aunque de lo primero no estoy muy seguro\\\" Einstein

Vicente

Se puede mejorar haciendo la variable singleton readonly e instanciándola en la declaración (instanciación perezosa) y añadiendo un constructor estático vacio (multithreading gratis). Es la forma recomendada de hacer un singleton en C# ;).

Un saludo!

Vicente

ethernet

Cita de: "Vicente"Se puede mejorar haciendo la variable singleton readonly e instanciándola en la declaración (instanciación perezosa) y añadiendo un constructor estático vacio (multithreading gratis). Es la forma recomendada de hacer un singleton en C# ;).

Un saludo!

Vicente

Esa implementación ya es perezosa salvo que algo de C# se me escape algo.

vincent

Desarrollo en .Net y metodologías http://devnettips.blogspot.com

Vicente

Cita de: "ethernet"
Cita de: "Vicente"Se puede mejorar haciendo la variable singleton readonly e instanciándola en la declaración (instanciación perezosa) y añadiendo un constructor estático vacio (multithreading gratis). Es la forma recomendada de hacer un singleton en C# ;).

Un saludo!

Vicente

Esa implementación ya es perezosa salvo que algo de C# se me escape algo.

Que con el readonly te ahorras el if ya que readonly te asegura que solo se llama la primera vez :) Un saludo!

Vicente

StraT

Puedes poner mi código modificado de tu forma Vicente? Es que no entiendo a qué te refieres.

Saludos
quot;Solo hay dos cosas infinitas, el universo y la estupidez humana, aunque de lo primero no estoy muy seguro\\\" Einstein

ethernet

Cita de: "Vicente"
Que con el readonly te ahorras el if ya que readonly te asegura que solo se llama la primera vez :) Un saludo!

Vicente

Oh sí, te ahorras un if explícito para ganar uno (o vaya usted a saber) implícito :). Si algo he aprendido es que usar las características del lenguaje para cosas obvias es enmarronar innecesariamente :P java sucks ya de paso.

Vicente

Cita de: "StraT"Puedes poner mi código modificado de tu forma Vicente? Es que no entiendo a qué te refieres.

Saludos

El primero que nombran en el link de Vincent es el singleton al que me refería :) Es el ejemplo que vas a encontrar en toooooodos los sitios de como debería ser un singleton en C#.

ethernet: deja de disimular que te encanta java :p Ciertamente no se que se genera por dentro con ese código (esta noche si me acuerdo lo desensamblo). Pero si un lenguaje tiene una característica será para que se use cuando sea necesario, como en este caso ;) No usarla por razones sin fundamento pues en fin...

Un saludo!

Vicente

ethernet

Cita de: "Vicente"
Cita de: "StraT"Puedes poner mi código modificado de tu forma Vicente? Es que no entiendo a qué te refieres.

Saludos

El primero que nombran en el link de Vincent es el singleton al que me refería :) Es el ejemplo que vas a encontrar en toooooodos los sitios de como debería ser un singleton en C#.

ethernet: deja de disimular que te encanta java :p Ciertamente no se que se genera por dentro con ese código (esta noche si me acuerdo lo desensamblo). Pero si un lenguaje tiene una característica será para que se use cuando sea necesario, como en este caso ;) No usarla por razones sin fundamento pues en fin...

Un saludo!

Vicente

La razón es que no creo que ganes en tiempo de ejecución y sí en claridad. Habría que ver como funciona el tema del multihread (ya sabemos lo escabroso que son los threads y los singletones).






Stratos es un servicio gratuito, cuyos costes se cubren en parte con la publicidad.
Por favor, desactiva el bloqueador de anuncios en esta web para ayudar a que siga adelante.
Muchísimas gracias.