El patrón Singleton o Instancia Única asegura que una clase solo tiene una instancia (un único objeto) y proporciona un punto global de acceso a ella.
Es un patrón muy sencillo que impide la creación de varios objetos de una clase dada, lo que trae como consecuencia un importante ahorro de memoria, pues en muchos casos hay clases de las que no es necesario tener varios objetos, esto ocurre en nuestra capa vista para las clases que representan a muchos de los formularios. Muchos de ellos deben de estar presentes en la aplicación una única vez, de forma que el usuario no puede mostrar una determinada ventana varias veces, pues esto, además de carecer de sentido, traería asociado un coste de memoria innecesario.
Particularmente en Java el patrón Singleton se puede implementar de diversas maneras:
Instanciación bajo demanda: Una sentencia condicional en el método de creación del objeto evalúa si este ya existe o no.
Instanciación automática: Se elimina la sentencia condicional y cuando se carga la clase por primera vez en memoria se crea este.
Sin instancia: Java nos permite trabajar con clases sin necesidad de instanciarlas. Esta nueva implementación conserva la idea pero no su estructura, ya que aquí realmente no hay una instancia. El Singleton es una clase con métodos y atributos estáticos y nunca llega a existir un objeto.
Las tres ideas son igualmente válidas para implementar un Singleton en Java, en los dos primeros casos disponemos de un método estático para crear la instancia, y luego accedemos a los métodos, por ejemplo:
Singleton s = Singleton.getInstance();
s.metodo();
En el tecer caso, no podemos guardar referencias al objeto como en los casos anteriores porque el objeto no existe, así que las invocaciones a métodos serán todas del tipo:
Singleton.metodo();
Para los formularios nos hemos decantado por el primer caso de instanciación.
Un ejemplo de uso del patrón Singleton para un formulario:
