jueves, 7 de mayo de 2015

Patrón de diseño Singleton en Java

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