Aug 17 2008

Singleton in Java

Der Artikel Singleton Pattern in Java beschreibt einige Implementierungen des Singletons in Java, bevor am Ende auf die bisher oft angetroffene und favorisierte Lösung eingangen wird.

Aber auch diese favorisierte Lösung hat in bestimmten Situationen Nachteile:

  • Bei entsprechend privilegiertem Zugriff können per Reflection immer noch zusätliche Instanzen der Singleton-Klasse erzeugt werden.
  • Soll das Singleton Serializable sein, so müssen alle Felder als transient markiert werden und die Methode readResolve() muss implementiert werden:

    private Object readResolve()
      return INSTANCE; // Just return the single instance..
    }
    

Setzt man Java 1.5 (oder später) ein, kann man das Singleton Pattern über einen Enum realisieren! Hier bekommt man eine sehr kleine "Klasse", die beide obigen Nachteile nicht hat!

public enum Singleton {
  // Guaranteed to be the single instance
  INSTANCE;

  public void doSomething() {...}
}

Diese Art des Singletons ist laut Item 3 in Effective Java die beste Art das Singleton Pattern in Java zu implementieren.

Literatur

Bücher

Links