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 } }