Contenido de certificación
Buscar
Social
Ofertas laborales ES
« Clases y tipos genéricos | Main | Inicialización de arrays bidimensionales »
martes
oct232012

Crear un Singleton

Pocos temas en Java han creado tanta controversia sobre la mejor manera de crear un Singleton.

En el siguiente artículo Singleton design in Java el autor muestra todas las maneras de crearlo, con ejemplos prácticos, señalando sus ventajas en inconvenientes, para concluir con dos alternativas seguras, desde todos los puntos de vista.

Sobre el uso de enum como Singleton, el artículo Why enum Singleton are better arroja más luz a la cuestión.

1.- Usar una clase estática interna

public class BiilPughSingleton {
private BiilPughSingleton() {
}
private static class LazyHolder {
private static final BiilPughSingleton INSTANCE = new BiilPughSingleton();
}
public static BiilPughSingleton getInstance() {
return LazyHolder.INSTANCE;
}
}

2.- Usar una clase enum

public enum EnumSingleton {
INSTANCE;
public static void someMethod (String param) {
//some class member
}
}

Reader Comments (3)

en lo personal yo no le veo la utilidad de usar el patrón singleton

en proyectos web usualmente se tiene un horrible archivo de configuración donde se dice que clase va a ser o no singleton por lo tanto no es necesario. ademas estarías manteniendo el mounstro por las puras si no lo usas para lo que fue echo

octubre 23, 2012 | Unregistered Commenterluis

A modo de ejemplo, aquí tienes uno que utilizo en mis desarrollos, para aislar el API público de las implementaciones privadas.
En librerías, y aplicaciones de escritorio, se usan con mucha frecuencia.

public enum CacheServices {

INSTANCE;

public static <K, V> JPCache<K, V> getCacheFIFO() {
return new CacheFIFO<>();
}

public static <K, V> JPCache<K, V> getCacheFIFO(final int capacity) {
return new CacheFIFO<>(capacity);
}

public static <K, V> JPCache<K, V> getCacheRandom() {
return new CacheRandom<>();
}

public static <K, V> JPCache<K, V> getCacheRandom(final int capacity) {
return new CacheRandom<>(capacity);
}

public static <K, V> JPCache<K, V> getCacheLRU() {
return new CacheLRU<>();
}

public static <K, V> JPCache<K, V> getCacheLRU(final int capacity) {
return new CacheLRU<>(capacity);
}

public static <K, V> JPCache<K, V> getCacheARC() {
return new CacheARC<>();
}

public static <K, V> JPCache<K, V> getCacheARC(final int capacity) {
return new CacheARC<>(capacity);
}
}

octubre 23, 2012 | Registered Commenterchoces

La ventaja que veo al uso de Singleton es que defines una instancia, que siempre utilizarás y será la misma.
Hombre, tiene muchas ventajas, por ejemplo, de memoria, de localización de la clase... en fin, puedes no usarlo, pero es un patrón práctico, y además, cogió bastante fama, todo hay que decirlo.

octubre 23, 2012 | Registered Commenterjcarmonaloeches

PostPost a New Comment

Enter your information below to add a new comment.

My response is on my own website »
Author Email (optional):
Author URL (optional):
Post:
 
Some HTML allowed: <a href="" title=""> <abbr title=""> <acronym title=""> <b> <blockquote cite=""> <code> <em> <i> <strike> <strong>