En esta ocasión quiero compartir esta implementación del patrón de diseño Singleton en Java. Veamos primeramente qué es un patrón de diseño:
"El patrón de diseño singleton (instancia única) esta diseñado para restringir la creación de objetos pertenedientes a una clase o el valor de un tipo a un único objeto". Fuente: Wikipedia
Como nos indica la definición anterior; el patrón de diseño singleton sólo permite crear un único objeto. Pero vamos a ver el ejemplo de cómo crear un patrón singleton para que quede claro:
1) Vamos crear la clase Futbol:
package equipofutbol; /** * * @author Balam-PC */ public class clsFutbol { private static clsFutbol instance; private String equipo; private clsFutbol(){ } public static clsFutbol getinstance(){ if(instance == null) instance = new clsFutbol(); return instance; } public void setEquipo(String gEquipo){ equipo = gEquipo; } public String getEquipo(){ return equipo; } }
La clase clsFutbol va a permitir crear una instancia; si intentamos crear otro objeto, simplemente se vuelve a llamar a la instancia creada anteriormente.
2) Vamos a crear una clase para implementar la clase clsFutbol:
package equipofutbol; /** * * @author Balam-PC */ public class EquipoFutbol { /** * @param args the command line arguments */ public static void main(String[] args) { // TODO code application logic here clsFutbol instancia1 = clsFutbol.getinstance(); instancia1.setEquipo("Uruguay"); System.out.println("Instancia 1: " + instancia1.getEquipo()); clsFutbol instancia2 = clsFutbol.getinstance(); System.out.println("Instancia 2: " + instancia2.getEquipo()); clsFutbol instancia3 = clsFutbol.getinstance(); System.out.println("Instancia 3: " + instancia3.getEquipo()); clsFutbol instancia4 = clsFutbol.getinstance(); System.out.println("Instancia 4: " + instancia4.getEquipo()); } }
Como podemos observar, creamos 4 instancias de la clase clsFutbol; sin embargo, en la primera instancia llenamos la clase con el parámetro Uruguay. Las siguientes instancias que se generen no se tratan de instancias diferentes, son la misma instancia; ejemplo de esto es que si imprimimos la variable donde almacenamos el equipo que configuramos en la primera instancia, este es el mismo para cada "objeto" que creamos posteriormente:
Fig. 1. Salida de ejecución de la clase EquipoFutbol.java
El patrón singleton se usa cuando queremos limitar las instancias de una clase a sólo una. Por ejemplo, cuando deseamos que una clase de conexión a una base de datos se tenga que instanciar una sola vez para evitar crear múltiples conexiones a la base de datos.
El ejemplo lo pueden descargar de los siguientes enlaces (desarrollado en NetBeans 7.4):