abr 01 2008

Plantilla en Java del patrón Singleton para Eclipse

Published by at 7:20 pm under Devel,Eclipse,Java

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 responses so far

3 Responses to “Plantilla en Java del patrón Singleton para Eclipse”

  1. David Martínon 03 abr 2008 at 3:04 pm

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

  2. adminon 03 abr 2008 at 9:29 pm

    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 :-)

  3. [...] una vez hechas las introducciones, pasamos a la chicha. Uno de los puntos sobre el que ya hablamos en otro post de DiarioLinux trata sobre el patrón singleton. El caso es que Bloch recomienda seguir una plantilla para aplicar [...]

Trackback URI | Comments RSS

Leave a Reply

« Back to text comment