En la mayoría de los lenguajes de programación, las clases eluden mucho el sistema de tipos. Si bien una clase, con sus métodos y variables estáticos, es un objeto, muy a menudo no puede implementar una interfaz o extender otras clases. Por eso, no se puede utilizar de manera polimórfica, ya que no puede ser el subtipo de otro tipo. Por ejemplo, si tiene una interfaz IFooable
, que es requerida por varias firmas de métodos de otras clases, el objeto de clase StaticFoo
no puede usarse en lugar de IFooable
, mientras que FooSingleton.getInstance()
puede (asumiendo, FooSingleton
implementa IFooable
).
Tenga en cuenta que, como comenté en la respuesta de Heinzi, un singleton es un patrón para controlar la instanciación. Reemplaza new Class()
con Class.getInstance()
, lo que le da al autor deClass
más control sobre las instancias, que puede usar para evitar la creación de instancias innecesarias. El singleton es solo un caso muy especial del patrón de fábrica y debe tratarse como tal. El uso común lo convierte más bien en el caso especial de los registros globales, que a menudo terminan mal, porque los registros globales no deben usarse simplemente a voluntad.
Si planea proporcionar funciones auxiliares globales, los métodos estáticos funcionarán bien. La clase no actuará como clase, sino simplemente como un espacio de nombres. Sugiero que conserve una alta cohesión o podría terminar con problemas de acoplamiento más extraños.
greetz
back2dos