Desing patterns: Singleton

Singleton es uno de los patrones más utilizados en el desarrollo de software. Se encarga de velar que exista una única instancia de la clase. El patrón centra todas las acciones en un único objeto, lo que significa que pueden existir problemas en aplicaciones concurrentes si no se toman las medidas adecuadas. La implementación será Java. Estructura general del patrón:

public class MyClass {
   static private MyClass instance = null;
    private MyClass{}
    synchronized public static void CreateInstance()
   {
        instance = new MyClass();
   }

   synchronized public static MyClass getInstance()
   {
        if(instance == null) 
               instance = new MyClass();
        return instance;
   }
}

Mediante synchronized, se establece exclusión mútua entre todos los hilos que deseen acceder, empleando como monitor la propia clase, pues se trata de métodos estáticos. Fíjate bien que los constructores son privados. De esta forma se obliga a que para tener un objeto se tenga que emplear algunos de los dos métodos. Si lo crees necesario, puedes incluir un método publico más para liberar recursos y hacer que la instancia sea nula.

Como conclusión, hay que acostumbrarse a emplear patrones de diseño pues dan soluciones a problemas cotidianos en la vida de cualquier programador.

2 comentarios
  1. Tambien se puede hacer asi, se carga instancia el objeto cuando se carga la clase y no tenemos que pasar por un if null cada ves que solicitamos el objeto y no necesitamos un synchronized en el metodo getIntance ya que el mismo es de solo lectura.
    En el caso anterior era necesario porque dos hilos podia crear al mismo tiempo un objeto.
    mas performante supongo….
    y menos codigo ….


    public class MyClass {

    static private MyClass instance = new MyClass();
    private MyClass(){}

    public static MyClass getInstance()
    {
    return instance;
    }

    }

  2. Lenny dijo:

    Tienes razon, es mucho más eficiente este método.
    Gracias por la corrección.

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s

A %d blogueros les gusta esto: