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
Serializablesein, so müssen alle Felder alstransientmarkiert werden und die MethodereadResolve()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
- BLOCH, J.: Effective Java. Addison-Wesley, 2nd Edition, 2008.
Links
- Double-checked locking and the Singleton pattern. Mai 2002.
- Singleton Pattern in Java. August 2006.