Was ist ein Singleton?

Da wir letztens bei statischen Variablen waren habe ich mir gedacht ich setze noch einen drauf und erkläre das nächste Thema der theoretischen und praktischen Informatik 🙂

Was ist ein Singleton?
Eigentlich ist das ganze einfach zu erklären. Wir haben wiedermal eine Klasse, z.B. CBundeskanzlerin. Da es ja bekanntlich nur eine Bundeskanzlerin gibt müssen wir vermeiden, dass mehrere Instanzen dieser Klasse erzeugt werden. Und was hilft uns dabei? Richtig, das Singleton!
In der praktischen Programmierung ist das Singleton meistens eine Basisklasse von der genau die Klassen erben, von denen später nur eine Instanz existieren soll. Heißt in unserem Beispiel: Die Klasse CBundeskanzlerin erbt von der Klasse CSingleton.

Was erbt denn unsere Bundeskanzlerin?
Häufig sind das genau 3 Dinge. Eine Referenz (Pointer) auf die eine Instanz, eine Methode um die Referenz zu erhalten (Get) und eine um sie zu löschen (Delete).  Wird die Methode Get aufgerufen, überprüft diese, ob der Zeiger auf eine Instanz der Klasse zeigt, wenn nicht wird sie erstellt und dann zurückgeliefert. Besteht ein valider Zeiger auf eine Instanz wirde dieser einfach nur zurückgeliefert.

Und wozu brauche ich den Käse im “realen” Leben?
Natürlich ist das ganze immernoch sehr theoretisch, aber wenn ich euch ein Beispiel liefere werdet ihr das ganze schnell verstehen. Häufig wird in der Programmierung ein sogenanntes Logfile eingesetzt. Dieses ermöglicht das Schreiben von Informationen in eine externe Datei um festzustellen wann welche Fehler auftreten.
Hat man nun eine Klasse CLogfile sollte diese nicht mehrfach erstellt werden, da eine vollkommen ausreicht und weitere Instanzen nur Overhead produzieren. Mit einem Singleton lässt sich dieses nun ganz einfach regeln indem man die Klasse CLogfile von CSingleton erben lässt (class CLogfile: public CSingleton<CLogfile> *1). Schon kann man leicht über CLogfile::Get() einen Zeiger auf die Instanz der Klasse CLogfile erhalten!

*1: Das “<CLogfile>” wird benötigt, da CSingleton eine Templateklasse ist. Templateklassen bieten die Möglichkeit eine beliebige Klasse mit Variablen und Methoden zu “versorgen” und nicht nur eine einzige. Deswegen könnte also auch die Klasse CBundeskanzlerin, CPapast und CRudiVoeller (gibt ja nur einen 😉 ) von CSingleton erben und nicht nur CLogfile. Das war jetzt nur sehr kurz angerissen, wen das Thema interessiert kann sich im Internet darüber schlau machen. Falls Interesse besteht, schreibe ich auch einen Artikel darüber 🙂

3 thoughts on “Was ist ein Singleton?”

  1. Gibt es auch einen wirklichen, praktischen Grund für die Nutzung von Singletons? Oder bleibt es bei solch einer theoretischen Einsatzmöglichkeit?

  2. Ja, du kannst dafür sorgen, dass es nur genau eine Instanz einer Klasse gibt. Das ist doch schonmal was 🙂 UND du kannst Instanzen über mehrere Quellcode-Dateien “am Leben erhalten” und immer über das Singleton darauf zugreifen!

Leave a Reply to Mea Culpa Cancel reply

Your email address will not be published. Required fields are marked *