Zitat von
tommie-lie:
Hier wurde das ganze mit Templates gelöst und die entstehenden Probleme für jede andere Implementierung angesprochen.
Genau das ist halt das Problem - Templates gibt es ja leider nicht in Delphi...
Zitat von
tommie-lie:
Jedenfalls hat der Typ
hier auch keine Möglichkeit gefunden, in Delphi ein Singleton zu schreiben, das type-safe ist *und* das seine Singleton-Eigenschaften vererben kann.
Interessanter Artikel - auch wenn mir sein Ansatz zu Singletons nicht so wirklich gut gefällt.
Zitat von
tommie-lie:
Irgendwo schwirrt aber eine kranke Möglichkeit rum, Templates in Delphi zu simulieren. Das Ding ist zwar hässlich wie die Nacht und nicht annähernd in der Nähe von etwas, das man noch grob als "Benutzerfreundlichkeit" bezeichnen könnte, aber immerhin geht's irgendwie.
Oh jee...
Schön ist das wirklich nicht. Wenn ich mir vorstelle, diesen Ansatz für mehr als 2 Klassen zu machen, dann habe ich ne Menge Compiler-Direktiven dadrin. Gefällt mir so gar nicht
Zitat von
tommie-lie:
Außerdem bastelt jbg
an etwas, aber ich weiß nicht, wie weit er ist und ob er es dir geben will, wenn's noch nicht ganz fertig ist
Und ich kann mich immernoch nicht mit Templates anfreunden...
Zitat von
tommie-lie:
Aber eine ganz andere Sache: Wie willst du bei 5 verschiedenen Singleton-Nachfahren jeweils eine Instanz ermöglichen? Du bräuchtest dafür doch 5 Variablen, die über die Lebenszeit der Anwendung zugreifbar bleiben. Gibt es auch eine Möglichkeit, in Delphi statische Klassenmember zu deklarieren? Wenn nein, müsstest du doch eh deine
Unit anpassen um 5 globale Variablen zur Verfügung zu stellen, die die Instanzen beinhalten.
Ganz genau hier habe ich auch mein Problem gesehen. Leider kann Delphi nur Klassenfunktionen, aber keine Klassenvariablen. Damit könnte man diesen ganzen Singleton-Kram viel einfacher erledigen. Endlich mal etwas, wo ich Java besser finde
Naja - ich habe jetzt auf jeden Fall für alle Klassen eine eigene Singleton-Implementation vorgesehen. Damit habe ich dann weniger Probleme. Aber dazu hätte ich auch noch eine Frage:
Wenn ich meine Oberklasse so aussieht:
Delphi-Quellcode:
TServiceController = class
public
class function Instance: TServiceController; virtual; abstract;
end;
Wie kann ich dann diese Instanz-Funktion korrekt zu folgendem ableiten:
Delphi-Quellcode:
TLoginServiceController = class(TServiceController )
public
procedure Login;
class function Instance: TLoginServiceController;
end;
So bekomme ich eine Compilerwarnmeldung. Wenn ich die Funktion overriden möchte, erhalte ich den Fehler, dass die Typen nicht zueinander kompatibel sind. Nun möchte ich aber auch nicht nur TServiceController zurückliefern, da ich dann immer casten muss... Wie mache ich das also?
Viele Grüße,
Dominik