Ein Singleton ist ein Objekt, was es in der Applikation nur einmal gibt.[1] Javas enum ist dafür perfekt geeignet, denn die Aufzählungsobjekte gibt es in der Tat nur einmal und die Bibliothek implementiert einige Tricks, um das Objekt auch möglichst nur einmal zu erzeugen, etwa dann wenn die Aufzählung serialisiert über die Leitung geht.
Ein Beispiel dazu. Ein enum MainFrame soll genau eine Konstante INSTANCE deklarieren. Da enum-Typen Attribute deklarieren können, soll unser MainFrame eine Objektvariable JFrame bekommen. Das bedeutet dann, dass mit dem Exemplar INSTANCE ein Swing-Fenster assoziiert ist. Das es nur ein Aufzählungselement in der enum gibt, kann auch nur ein JFrame-Exemplar gebildet werden:
public enum MainFrame
{
INSTANCE;
private JFrame f = new JFrame();
public JFrame getFrame()
{
return f;
}
}
Damit ist INSTANCE ein Exemplar vom Typ MainFrame und hat ein privates Attribut und eine öffentliche Zugriffsmethode. Da es nur eine Konstante gibt, gibt es auch nur ein Fenster. Eine Anwendung sieht etwa so aus:
com/tutego/insel/enumeration/MainFrameDemo.java, main()
MainFrame.INSTANCE.getFrame().setTitle( "Singleton" );
MainFrame.INSTANCE.getFrame().setBounds( 100, 100, 300, 400 );
MainFrame.INSTANCE.getFrame().setVisible( true );
Aus jedem Teil der Anwendung ist MainFrame.INSTANCE zugänglich und repräsentiert dieses eine Exemplar. Auch kann dieses Exemplar übergeben werden, weil es ein Objekt ist, wie jedes andere auch.
[1] Pro Klassenlader, um das etwas genauer auszudrücken.
2 Gedanken zu “enum für Singleton nutzen”