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):