Está en la página 1de 2

Singleton

EN INGENIERÍA DE SOFTWARE, EL PATRÓN SINGLETON (INSTANCIA ÚNICA EN INGLÉS) ES UN


PATRÓN DE DISEÑO DISEÑADO PARA RESTRINGIR LA CREACIÓN DE OBJETOS
PERTENECIENTES A UNA CLASE O EL VALOR DE UN TIPO A UN ÚNICO OBJETO.

VENTAJAS DESVENTAJAS
Cada vez que se deserializa,
“Garantiza que una clase sólo
se creará una nueva instancia
tenga una instancia y
de la clase y por tanto, se
proporciona un punto de
crean varias instancias de una
acceso global a ella.”
clase Singleton

Permite utilizar el método de


clonación. Oculta las dependencias

Usando Reflexión es posible Un componente que usa un


romper el patrón Singleton en singleton oculta información
todas sus implementaciones sobre dependencias. Cuando
se exponen las dependencias
fuerza a pensar en ellas y a
pensar cuando debemos
Una clase singleton puede utilizar un componente.
extender e implementar
interfaces, mientras que una
clase estática no puede.
Difícil de testear

Aunque la principal ventaja es


que tiene, es que una clase
singleton permite el
polimorfismo sin forzar al El acoplamiento oculto hace
usuario a asumir que sólo hay que las pruebas son muy
una instancia. complicadas, ya que no hay
manera inyectar una instancia
de prueba del singleton. 

Una clase no mantiene ningún


estado y sólo tiene métodos
de acceso, porque los Afecta a la ejecución de un
métodos estáticos son más conjunto de pruebas de tal
rápidos al ser creados en manera que no están
tiempo de compilación. adecuadamente aislados
entre sí.

Sources: http://codecriticon.com/patron-singleton/
; http://siul02.si.ehu.es/~alfredo/iso/06Patrones.pdf
ESTRUCTURA GENERAL

EJEMPLO
public class EagerSingleton {
   private static volatile EagerSingleton instance = new
EagerSingleton();

   // Constructor privado


   private EagerSingleton() { }

   public static EagerSingleton getInstance() {


       return instance;
   }
}

public class StaticBlockSingleton {


   private static final StaticBlockSingleton instance;

   static {
       try {
           instance = new StaticBlockSingleton();
       } catch (Exception e) {
           throw new RuntimeException("Error!!!!", e);
       }
   }

   public static StaticBlockSingleton getInstance() {


       return instance;
   }

   private StaticBlockSingleton() {}
}