Creo entender lo que dice Carlos, vamos a comprobar esto dando un ejemplo:
public class DiaNoche {
private static DiaNoche instance = new DiaNoche();
private Boolean esDeDía;
private DiaNoche(){
}
public static DiaNoche getInstance(){
return instance;
}
public Boolean getEsDeDía() {
return esDeDía;
}
public void setEsDeDía(Boolean esDeDía) {
this.esDeDía = esDeDía;
}
}
Este es un singleton que SI tiene un estado, te dice si es de día o de
noche. Alguno se encargará de cambiarle el estado, pero una vez que cambie
su estado a todos los que lo invoquen les dirá lo mismo. Mi confusión viene
por pensar que el "estado" cambie según quién lo invoque. En ese caso no
estaríamos hablando de un singleton porque cambiaría su comportamiento según
quién lo llame y tendrías el problema de concurrencia múltiple que nombraste
al principio.
El día 27/09/07, Carlos Fontela <[EMAIL PROTECTED]> escribió:
>
> De acuerdo en parte con lo que dice Abel, pero cuidado con la afirmación
> "los Singleton no tienen estado", porque en realidad esa -creo- es una mala
> traducción...
>
> Lo único que caracteriza a un Singleton es que hay una única instancia
> para la clase, quiere decir que el estado de un Singleton es único para toda
> la clase (de allí que suela implementar con métodos y atributos "static"),
> pero no sólo puede tener estado (valores en sus atributos), sino que éste
> estado puede cambiar, con la única condición de que debe permanecer único
> para toda la clase.
>
> Por lo tanto, un objeto Singleton no es un objeto sin estado, y ni
> siquiera un objeto constante.
>
> ¿Se entiende?
>
> Saludos,
>
> Carlos Fontela
>
>
>
>
>
>
> ------------------------------
> *De:* [EMAIL PROTECTED] [mailto:
> [EMAIL PROTECTED] *En nombre de *Abel Fillol
> *Enviado el:* jueves, 27 de septiembre de 2007 8:05
> *Para:* Una lista para consultas de programación
> *Asunto:* Re: [Prog] singleton con parametros
>
> El singleton por definición no puede tener estado. La idea del singleton
> es que todo el mundo usa algo y ese algo es igual para todos y para todos se
> comporta de la misma manera, si necesitas comportamientos distintos según
> quién te está llamando no estamos hablando entonces de un singleton. En ese
> caso estarías necesitando un Builder <<
> http://es.wikipedia.org/wiki/Builder_(patr%C3%B3n_de_dise%C3%B1o)<http://es.wikipedia.org/wiki/Builder_%28patr%C3%B3n_de_dise%C3%B1o%29>>>.
> Ahora, si me decis que solamente necesitas 2 o 3 comportamientos y no
> uno distinto para cada clase, entonces podrías solucionarlo con 2 o 3
> singleton distintos, pero bueno, ahí ya depende del contexto cuál es la
> mejor solución.
>
> Conclusión, los singleton no tienen estados y eso hace imposible lo que
> estás intentando hacer.
>
> El día 27/09/07, Francisco Dibar < [EMAIL PROTECTED]> escribió:
> >
> > hola!
> >
> > tengo una clase que se inicializa con un parametro, y quiero que se
> > comporte como singleton, es decir:
> >
> > Singleton* pA = Singleton::getInstance(paramA);
> >
> > pero no me gusta como queda porque si ahora hago:
> >
> > Singleton* pB = Singleton::getInstance(paramB);
> >
> > me va a devolver el singleton que se inicializo con paramA. Entonces
> > tengo que hacer siempre un chequeo de si el parametro que le paso es
> > el que se uso para inicializar.
> >
> > que otra solucion mas prolija se les ocurre?
> >
> > slds.
> > francisco.
> > _______________________________________________
> > Lista de correo Programacion.
> > [email protected]
> > http://listas.fi.uba.ar/mailman/listinfo/programacion
> >
>
>
>
> --
> Abel Sebastián Fillol
>
> _______________________________________________
> Lista de correo Programacion.
> [email protected]
> http://listas.fi.uba.ar/mailman/listinfo/programacion
>
>
--
Abel Sebastián Fillol
_______________________________________________
Lista de correo Programacion.
[email protected]
http://listas.fi.uba.ar/mailman/listinfo/programacion