black_adept hat geschrieben:- Dann ist's kein Singleton Design-Pattern mehr und manche Leute lieben Design-patterns.
- GET_INSTANCE könnte Parameter beinhalten - dann müsste der Klassenkonstruktor für alle möglichen Parameterwertkombinationen was vorhalten und das statische Attribut wäre wahrscheinlich eine Tabelle. Und wenn die Anzahl der möglichen Parameterwerte Legion ist...
- Die Verwendung des korrekt implementierten Design-Patterns ohne Rücksicht auf Verluste ergibt politische und religiöse Vorteile
Auf den ersten und letzten Punkt bin ich auch gekommen — wobei ich eher praktische Vorteile sehe als religiöse. Denn wenn ich ein Pattern sehe, weiß ich gleich, wie es funktioniert, das weiß ich bei anderen Konstrukten nicht.
Ich hätte noch eines, verwandt mit deinem Mittleren: Ich kann nicht verschiedene get_instances für verschiedene Fälle vorhalten. Das ist meine Variante um nicht auf diskrete (also auf eine zählbare Grundgesamtheit beruhende) Parameter zurückzugreifen. So kann kann man den Fall abdecken, dass der Constructor diskrete Parameter erwartet (den man ja von außen nicht aufrufen kann, weil privat. So kann ich von der Klasse LCL_COLOR statt einer GET_INSTANCE( schwarz ) eine GET_INSTANCE_SCHWARZ( ) verwenden, ohne prüfen zu müssen, ob schwarz eine (zulässige) Farbe ist.
Außerdem - und das ist mein zentrales Argument - kann man eine so erzeugte Instanz nur auf Umwegen zurücksetzen, weil der Klassenkonstruktor nie wieder aufgerufen wird. Bei GET_INSTANCE muss ich nur die Instanz löschen, ohne dass der Aufrufer das wissen muss.
ewx hat geschrieben:black_adept hat geschrieben:
Die Klasse verwaltet mehr als ein Singleton, aber nicht alle werden zwangsläufig verwendet
Dann ist es m.E. kein Singleton mehr.
Das ist richtig. Das wäre ein Multiton, praktisch ein Singleton, bei dem das Attribut SINGLETON eine Tabelle ist. Hab ich auch schon verwendet, um die Instanzen verwalten zu können. Dazu muss ich wissen, welche es gibt.
Ralf *dankt für die Diskussion und wünscht allen einen guten Rutsch