in http://www.lazarusforum.de/viewtopic.php?f=18&t=11936 bekam ich den Rat für Programmeinstellungen oder Datenbankanbindungen das Singleton-Konzept zu verwenden. Das klappt mittlerweile ganz gut mit der Erkenntnis, dass es DEN code für ein Singleton-Pattern nicht gibt. Der scheint je nach Programmierer und Verwendungszweck/Anforderungen sehr variabel zu sein.
Nachdem die Programmaufgaben die ich in Singletons packe für das gesamte Programm zur Verfügung stehen müssen und auch beim Start im wesentlichen auch vorhanden sein sollten erzeuge ich die Objekte im initialization Abschnitt der Unit.
Klappt alles soweit gut.
Nur der Zugriff zu den Objekten direkt im restlichen Code ist in einigen Singleton-Varianten recht aufwendig.
Code: Alles auswählen
procedure xy
var
s: TMySettings; // class
begin
s := GetMySettings; // GetMySettings nehme ich jetzt mal als als Funktion die den Singleton zurückgibt
s.Irgendwas := Wert;
end;
Daher habe ich die Variable des Singleton im gesamten Programm sichtbar gemacht.
Code: Alles auswählen
interface
....
var
MySettings: TMySettings = nil;
implementation
....
Code: Alles auswählen
MySettings.Irgendwas := Wert;
Gibt es dazu Einwände ?
Dann ist auch noch der zeitliche Ablauf der Erstellung der verschiedenen Singleton-Objekte und die Rückmeldungen an den Benutzer ein Thema.
Wie schafft man es z.B. das Objekt mit den Einstellungen vor dem Objekt mit den Datenbankzugriffen zu erstellen ? Nur die Reihenfolge in der uses-Klausel? Oder das Objekt so zu strukturieren dass erst nur das Objekt ohne Funktion erzeugt wird (wobei dann die Reihenfolge egal wäre) und mit einer init-Prozedur an einer bestimmten Stelle das Objekt erst mit Leben füllt.
Und wie bekomme ich eine Rückmeldung z.B. in einer Splash Screen hin? z.B. irgend ein Logo auf einer Form und z.B. in einem Memo was gerade passiert um das Programm zu starten. Mir geht es nicht darum wie man eine Splash-Screen erstellt und einbindet sondern wie die diversen Singleton-Objekte damit kommunizieren können?
THX