Clases Singleton

Singleton es un patrón de diseño de clases que permite asegurar que únicamente se va a instanciar un objeto de dicha clase. Para ello, es la propia clase controla el instanciado de ese objeto, haciendo que el constructor sea privado y facilitando un método público y estático que devuelva la instancia creada de la clase.

public class ConexionSingletonMonoThread {

   // Declarando el constructor privado, nos aseguramos de
   // que no se instancien objetos fuera de la propia clase
   private ConexionSingletonMonoThread() {}

   // miInstancia almacena la única instancia de la clase
   private static ConexionSingletonMonoThread miInstancia;

   // Método que devuelve la única instancia creada de la
   // clase. Si no está instanciada, crea el objeto
   public static ConexionSingletonMonoThread getInstance() {
      if (miInstancia == null) {
         miInstancia = new ConexionSingletonMonoThread();
      }
      return miInstancia;
   }

   public void inicia() {
      // Implementación de un método cualquiera
   }

}

En el caso de un programa multi-hilo, la implementación varía ligeramente para evitar que varios hilos instancien a la vez el objeto. En este caso, el objeto se crea en una clase estática interna.
 

public class ConexionSingletonMultiThread {

   // Constructor privado para evitar la creación
   // de nuevas instancias desde fuera de la clase
   private ConexionSingletonMultiThread() { }

   // Clase estática interna que se encarga de instanciar
   // el objeto
   public static class ConexionSingletonMultiThreadHolder {
      public static ConexionSingletonMultiThread conexion = new ConexionSingletonMultiThread();
   }

   // Método getInstance que devuelve el objeto creado
   public static ConexionSingletonMultiThread getInstance() {
      return ConexionSingletonMultiThreadHolder.conexion;
   }

   public void inicia() {
      // Implementación de un método cualquiera
   }

}

 

public class ConexionSingletonMonoThread { // Declarando el constructor privado, nos aseguramos de // que no se instancien objetos fuera de la propia clase private ConexionSingletonMonoThread() {} // miInstancia almacena la única instancia de la clase private static ConexionSingletonMonoThread miInstancia; // Método que devuelve la única instancia creada de la // clase." data-share-imageurl="" style="position:fixed;bottom:0px;left:0px;">