Si son solo métodos utilitarios y no hay que guardar estado, metodos estáticos son mejores.
Saludos
--
www.JavaSOS.com
Grupo de colaboración Java/J2ee para desarrolladores de habla hispana.
Más sustento a la opción de static?
El footprint de memoria es menor.
El código es más legible.
El compilador puede hacer inlining (perdón por el neologismo) para mejorar la performance.
Si tu clase solo va a tener métodos utilitarios hacer un singleton va en contra del "espíritu" del patrón.
Espero la réplica de los singleton-fans :p
Una clase utilitaria, por definici�n, no tiene nada que ver con el
patr�n Singleton. El patr�n Singleton es una soluci�n para asegurarse
que exista una instancia �nica de una clase y una clase utilitaria NO
tiene instancias! En la utilitaria los m�todos son est�ticos, no hay
estado, no hay instancia[2].
Si hay alguna similitud, es que ambos, Singleton y Utilitaria deber�an
tener constructores privados. En la Utilitaria con el objetivo de
anularlo. En el Singleton, para que sea usado exclusivamente por el
m�todo instance() que la devuelve (si se hace instalaci�n lazy, como
suele hacerse) o usada en la inicializaci�n est�tica (para hacer
inicializaci�n eager).
Es importante conocer el patr�n Singleton... para NO usarlo. Aunque est�
documentado, hay mejores soluciones siempre (como toda regla puede
romperse muuuuy excepcionalmente). Ver [1]
Sin ir m�s lejos, Singleton complica las pruebas unitarias, lleva a
abusarse de �l, y es una forma de estado global sucia (a.k.a. variable
global). Tiene m�s problemas que ventajas y est� desaconsejado. Como es
el patr�n m�s simple, suele abusarse de �l (�mira mam�, uso
patrones!!!). Normalmente tenemos alg�n framework de IoC (sea cual sea
el tipo de aplicaci�n y tecnolog�a), que se encargar� de manejar beans
singletons de forma m�s elegante, dentro de un contexto apropiado.
Slds.-
Pablo
[1] http://en.wikipedia.org/wiki/Singleton_pattern
[2] http://en.wikipedia.org/wiki/Utility_pattern
def singleton(cls):
instances = {}
def getinstance():
if cls not in instances:
instances[cls] = cls()
return instances[cls]
return getinstance
@singleton
class MyClass:
class Singleton(object):
_instance = None
def __new__(cls, *args, **kwargs):
if not cls._instance:
cls._instance = super(Singleton, cls).__new__(
cls, *args, **kwargs)
return cls._instance
aca lo que hace es sobreescribir el constructor, para retornarle la instancia compartida por todos. Cuando queres crear una instancia, la creas de forma normal ( new MiClase() en java sería). Si el dia de mañana no queres que sea singleton, simplemente borras el __new__ y listo... todo lo demas en todas las clases permanecen igual, mejorando la mantenibilidad del código... Cosa que perdes al utilizar statics en java.