Immer wieder die alte Leier mit Singletons. Wie Torsten schon ganz richtig drauf hingewiesen hat, haben Singletons ein großes Problem mit Threadsicherheit.
Wenn ich an ein Singleton denke, dann denke ich erstmal an etwas in der Art:
public class Singleton {
private static Singleton instance;
private Singleton() {}
public static Singleton getInstance() {
if (Singleton.instance == null) {
Singleton.instance = new Singleton();
}
return Singleton.instance;
}
}
getInstance()
mit null
-Check. Fertig. Wenn da nicht diese Nebenläufigkeit wäre. Um die geht es hier aber eigentlich nicht vordergründig. Habt ihr mal darüber nachgedacht, einen Enum
für ein Singleton zu benutzen? Das könnte z.B. so aussehen.
public enum Singleton{
INSTANCE;
}
Ja ja, so einen Enum
hat jeder schon mal gesehen. Der Clou: Enums
können eben auch Methoden und Variablen halten. Durch die Implementierung von Enums
sind diese nicht nur threadsicher, sie werden auch erst bei der ersten Verwendung erzeugt.
public enum Singleton{
INSTANCE;
private String value;
public void connect() {}
public String getValue() {}
}
Die Verwendung ist einfach:
Singleton.INSTANCE.getValue()
Fertig!
Der Artikel Singleton mit Enums erschien zuerst auf icancode.de.