Plantilla en Java del patrón Singleton para Eclipse

Parafraseando a Groucho Marx: éstos son mis títulos de post. Si a usted no le gustan, tengo otros 😉

Warning: post muy técnico.

Si programas en un lenguaje orientado a objetos, es probable que te hayas encontrado a menudo con el patrón singleton. Últimamente me he encontrado tecleando las líneas de este patrón en Java una y otra vez, con lo que se me ha encendido la bombilla de la pereza: «y ésto… ¿no lo podré automatizar?» Por supuesto. En Eclipse es sencillo:

Window->Preferences->Java->Editor->Templates. Click en New e insertar el siguiente código. Darle un nombre («singleton» podría ser una decisión acertada 😉 . Cuando quieras usar el patrón en tus clases Java, escribe «singleton» y pulsa Ctrl+Espacio. ¡Magia!

private static ${enclosing_type} instance;
private ${enclosing_type}(){}
public static ${enclosing_type} getInstance(){
if(null == instance){
instance = new ${enclosing_type}();
}
return instance;
}

Nota: ojito, que esta forma de implementación del patrón parece sufrir una condición de carrera en el bloque if … una posible solución sería inicializar la referencia estática en la propia sección de declaraciones.

3 comentarios en «Plantilla en Java del patrón Singleton para Eclipse»

  1. Referente a la condición de carrera… También podrías sincronizar la llamada, no? (syncronized)…
    Al igual me equivoco…

  2. Sí, pero tras darle varias vueltas, yo creo que es más eficiente inicializar aquí (ahorrándome el synchronized)

    private static Clase instance = new Clase();

    Tal y como se explica aquí:
    http://forum.java.sun.com/thread.jspa?threadID=606978&messageID=3313598#3302883

    Dos cosas:
    1) si no voy a usar más de un thread, no parece que importe si uso la primera opción (del template) o ésta otra que describo en este comentario.

    2) habría que pensar cómo tratar el caso en el que la instanciación «= new Clase()» pudiera lanzar una excepción 🙂

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *

Este sitio usa Akismet para reducir el spam. Aprende cómo se procesan los datos de tus comentarios.