Entwurfsmuster / Design Pattern: Einzelstück (Singleton)

avatar

Das Singleton ist ein weiteres Beispiel aus der Kategorie der erzeugenden Muster.

Zweck

Das Muster Einzelstück stellt sicher, dass von einer Klasse nur eine einzige Instanz existiert, und bietet einen globalen Zugriffsmechanismus auf diese Instanz an.

Anwendbarkeit

Man kann das Muster Einzelstück zur Lösung folgender Probleme benutzen:

  • Es darf nur eine einzige Instanz einer Klasse geben. Diese Instanz muss über einen wohldefinierten Zugriffsmechanismus ansprechbar sein.
  • Die Klasse der einzigen Instanz soll durch Unterklassenbildung erweiterbar sein, ohne dass Dienstnutzer davon betroffen sind.

2singleton.png
Abbildung: Ein einfaches Beispiel eines Singleton

Beteiligte Klasse

Die Klasse Einzelstück definiert die Klassenoperation (statische Funktion) gibEinzigeInstanz(), über welche Dienstnutzer auf ihre einzige Instanz zugreifen können. Sie kann verantwortlich für die Erzeugung der einzigen Instanz sein, muss es aber nicht.

Konsequenzen

Das Muster Einzelstück hat folgende Vorteile:

  • Der Zugriff auf die einzige Instanz erfolgt nur über die entsprechende Klassenoperation und kann somit kontrolliert und beschränkt werden.
  • Der Namensraum wird nicht mit “global“ sichtbaren Variablen überflutet, in denen jeweils die Instanzen verschiedener Einzelstücke vorgehalten werden.
  • Es erlaubt die Änderung der Operationen in Unterklassen, und die einzige Instanz kann zur Laufzeit durch die Instanz einer Unterklasse des Einzelstücks ersetzt werden.
  • Es erlaubt auch eine variable Anzahl von Instanzen des Einzelstücks, indem einfach die Klassenoperation gibEinzigeInstanz() entsprechend geändert wird.
  • Der Einsatz einer einzigen Instanz zusammen mit entsprechenden Instanzoperationen ist flexibler als die Realisierung des Einzelstücks (und der Operationen der einzigen Instanz) rein mit Klassenoperationen.
    Erstens ist die Erweiterung auf mehrere Instanzen bei der Realisierung über Klassenoperationen nicht mehr elementar.
    Zweitens können (zumindest im Fall von C++) Klassenmethoden nicht in Unterklassen überschrieben werden, was die Erweiterung des Einzelstücks durch Unterklassenbildung erschwert.

Quelle
Erich Gamma, Richard Helm, Ralph Johnson und John M. Vlissides Design Patterns — Elements of Reusable Object-Oriented Software Addison Wesley, Reading, MA, 1994



0
0
0.000
1 comments
avatar

Ich muss ehrlich sagen, weder beruflich noch als Hobby Spieleprogrammierer habe ich jemals ein Singleton gebraucht. Jeder kennt es aber wirklich Verwendung findet es kaum.

Aber vielleicht ist es in anderen Branchen anders.

0
0
0.000