English | 简体中文 | 繁體中文 | Русский язык | Français | Español | Português | Deutsch | 日本語 | 한국어 | Italiano | بالعربية

¿Cómo crear un enum singleton en Java?

El patrón Singleton limita la instanciación de la clase a un solo objeto. INSTANCE es el campo público estático final que representa la instancia del enumerado. Podemos obtener la instancia de la clase usando EnumSingleton.INSTANCE, pero si queremos cambiar la implementación, es mejor encapsularla en el getter.

Hay varias razones por las que podemos usar enumeraciones como singleton en Java

  • Garantiza una instancia (incluso si se intenta instanciar múltiples instancias a través de reflexión).

  • Seguro de hilos.

  • Serialización.

Sintaxis

public enum Singleton {
   INSTANCE;
   private singleton() {
   }
}

Ejemplo

public enum EnumSingleton {
   INSTANCE;
   private String name;
   private int age;
   private void build(SingletonBuilder builder) {
      this.name = builder.name;
      this.age = builder.age;
   }
   public static EnumSingleton getSingleton() { // static getter      
       return INSTANCE;
   }
   public void print() {
      System.out.println("Name: "+name + ", age: "+age);
   }
   public static class SingletonBuilder {
      private final String name;
      private int age;
      private SingletonBuilder() {
         name = null;
      }
      public SingletonBuilder(String name) {
         this.name = name;
      }
      public SingletonBuilder age(int age) {
         this.age = age;
         return this;
      }
      public void build() {
         EnumSingleton.INSTANCE.build(this);
      }
   }
   public static void main(String[] args) {
      new SingletonBuilder("Adithya").age(25).build();
      EnumSingleton.getSingleton().print();
   }
}

Resultado de salida

Nombre: Adithya, edad: 25