Java-Design: So funktioniert das Singleton

Beim Design eines Systems wird üblicherweise gesteuert, wie ein Objekt verwendet wird. Zugleich sollen Anwender daran gehindert werden, Kopien davon herzustellen beziehungsweise neue Instanzen zu erzeugen. Ein Singleton kann beispielsweise verwendet werden, um einen Verbindungspool zu erzeugen. Es ist nicht ratsam, stets eine neue Verbindung herzustellen, wenn ein Programm etwas in eine Datenbank schreiben muss. Stattdessen ist es möglich, eine oder mehrere Verbindungen, bei denen es sich bereits um einen Pool handelt, mittels des Singleton-Musters zu instanzieren.

Das Singleton-Muster wird sehr häufig zusammen mit dem Fabrikmethodenmuster verwendet, um eine systemübergreifende Ressource zu erzeugen, deren spezifischer Typ dem verarbeitenden Code nicht bekannt ist. Ein Beispiel für den gleichzeitigen Einsatz dieser beiden Muster ist das Abstract Windowing Toolkit (AWT). Bei GUI-Anwendungen ist sehr häufig nur eine Instanz eines grafischen Elements pro Anwendungsinstanz erforderlich, etwa das Dialogfeld Drucken oder die Schaltfläche OK.

Potenzielle Probleme beachten

Obwohl das Singleton eines der einfachsten Designmuster ist, gibt es damit einige Probleme:

Konstruktion in Anwendungen mit mehreren Threads

Das Singleton-Muster muss in Anwendungen mit mehreren Threads sorgfältig konstruiert werden. Wenn zwei Threads die Erzeugungsmethode gleichzeitig ausführen sollen und kein Singleton existiert, müssen beide nach einer Singleton-Instanz suchen. Es darf jedoch nur ein Thread das neue Objekt erzeugen. Die klassische Lösung für dieses Problem besteht in einem gegenseitigen Ausschluss bei der Klasse, die angibt, dass das Objekt instanziert wird. Nachfolgend wird eine Thread-sichere Version eines Singletons gezeigt:

Als alternative Lösung kann das synchronisierte Schlüsselwort zur Deklaration der getInstance()-Methode hinzugefügt werden:


public static synchronized Singleton getInstance()

Vorausschauend Klone vermeiden

Es kann trotzdem noch eine Kopie des Singleton-Objekts durch Klonen mittels der clone()-Methode des Objekts hergestellt werden. Um dies zu verhindern, muss die Klonmethode unwirksam gemacht werden. Dadurch entsteht dann eine ClonNotSupportedException-Ausnahme:

Das Finalisieren der Singleton-Klasse bedenken

Die Singleton-Klasse soll unter Umständen finalisiert werden, damit keine Unterklassen von Singletons gebildet werden, die andere Probleme verursachen können.

Auf Speicherbereinigungen achten

Abhängig von der jeweiligen Implementierung könnten die Singleton-Klasse und sämtliche zugehörigen Daten möglicherweise bereinigt werden. Aus diesem Grund muss sichergestellt sein, dass eine aktuelle Referenz auf die Singleton-Klasse vorhanden ist, wenn die Anwendung läuft.

Fazit

Das Singleton-Muster wird sehr häufig genutzt und hat seine praktischen Vorteile bei der Software-Entwicklung unter Beweis gestellt. Obwohl es sich dabei um kein Java-spezifisches Muster handelt, ist es aus der Java-Programmierung nicht mehr wegzudenken. Wenn es auch sehr einfach ist, sollten dennoch die im vorliegenden Artikel beschriebenen Beschränkungen des Singleton-Musters berücksichtigt werden.

Page: 1 2

ZDNet.de Redaktion

Recent Posts

Chrome 131 schließt zwölf Sicherheitslücken

Eine schwerwiegende Anfälligkeit hebelt die Sicherheitsfunktion Seitenisolierung auf. Betroffen sind Chrome für Windows, macOS und…

2 Tagen ago

DeepL Voice mit KI für Sprach- übersetzungen

DeepL Voice ermöglicht Live‑Übersetzung von Meetings und Gesprächen in 13 Sprachen.

2 Tagen ago

November-Patchday: Microsoft schließt Zero-Day-Lücken in Windows

Betroffen sind Windows und Windows Server. Microsoft patcht aber auch Schwachstellen in Excel, Word und…

2 Tagen ago

LG zeigt elastisches OLED-Display

Es lässt sich um bis zu 50 Prozent dehnen. Allerdings besitzt es eine deutliche geringere…

3 Tagen ago

BSI zu Cybersicherheit: Bedrohungslage bleibt angespannt

Allerdings nimmt auch die Resilienz gegenüber Cyberattacken zu. Das BSI hat außerdem die Cybersicherheit anstehender…

3 Tagen ago

IT-Ausgaben in Europa steigen 2025 voraussichtlich um 8,7 Prozent

Es ist das größte Wachstum in einem Jahr seit 2021. Unter anderem lässt das Interesse…

3 Tagen ago