singleton vs. static
-
hi
Was ist der Vorteil von Singleton-Klassen gegenüber statischen Klassen?
Diese Frage ist bei einem aktuellen Projekt aufgetaucht, welches ich in PHP5 entwickle. Es handelt sich um Klassen wie z.B. für das Session-handling.Meine Frage ist nun was mir welchen Vorteil bringt im Bezug auf PHP5 und allgemein (Java, C++)
danke für eure Antworten
-
Was meinst du mit statischer Klasse? Ist das etwas PHP5 spezifisches oder meinst du eine Klasse die nur statische Member hat?
Ich geh mal vom letzten Fall aus:
Ein Singleton ist eine Klasse, von der nur eine Instanz existieren kann.
Von einer Klasse mit nur statischen Membern, kann keine Instanz existieren.
-
Der Hauptunterschied ist wohl, dass du bei Singleton mehrere Instanzen haben kannst (allerdings nicht gleichzeitig) oder gar keine, bei static... naja ist das Zeug immer irgendwie da.
Bei der Auswahl muss man sich also Gedanken machen, ob es beabsichtigt ist, mal ab und zu die einzige Instanz zu entsorgen und eine neue zu schaffen.
Bei einem Schachprogramm könnte es eine Singleton-Instanz eines Schachspiels (inklusive Spielbrett, Spieluhr) geben. Man kann leicht einsehen, dass es praktisch ist, wenn man für ein neues Spiel einfach die alte Instanz wegwirft und eine neue anlegt.
-
Bei einem Singleton kann man zB auch von anderen Klassen virtuell ableiten
-
Danke für eure Antworten.
Nun ist mir der Unterschied klar
-
Bei static-Variablen kann es Probleme mit der Initialisierungsreihenfolge geben. Wenn man zum Beispiel eine logging-Objekt hat, und ein anderes static Objekt loggt bei der Konstruktion, dann muß man irgendwie garantieren, daß das statische logging-Objekt vorher konstruiert wurde. Kann man bei static in C++ aber nicht garantieren, beim Singleton geht das, weil es vor der ersten Benutzung erstellt wird.