![]() |
Fragen zum Singelton Entwurfsmuster
Hallo zusammen,
ich schäme mich ein bischen aber ich verstehe da ein paar Sachen nicht. Delphi2006 erstellt mir beim Singelton folgendes:
Delphi-Quellcode:
1) Was genau bedeuten die Anweisungen "class var" und "class function" ?
type
TSingleton = class strict private constructor Create; class var FInstance:TSingleton; public class function GetInstance: TSingleton; procedure MeldeDich; // von mir ;-) end; In der Hilfe steht was von klassenstatisch , aber was ist das? 2) Warum brauche ich nicht "Static" angeben. (So verstehe ich die Hilfe) Zitat:
Wenn ich es mit Free frei gebe kann ich immer noch MeldeDich aufrufen.
Delphi-Quellcode:
Wenn ich dann noch mal Free aufrufe gibt es eine Zugriffsverletzung.
procedure TForm1.Button2Click(Sender: TObject);
begin SchokoladenKocher.Free; SchokoladenKocher.MeldeDich; // klappt end; Ihr sieht: ich weiß nicht wirklich was ich da mache :oops: |
Re: Fragen zum Singelton Entwurfsmuster
Hallo Thomas,
unabhängig vom singleton pattern und auch ohne dass ich Delphi 2006 kenne: (1) class var signalisiert offensichtlich ein sogenanntes Klassenfeld, class function kennzeichnet eine Methode, die du wie auch den Konstruktor mit dem Klassennamen aufrufst, d.h. du musst nicht erst eine Instanz der Klasse bilden. (2) GetInstance() kommt ohne static aus, weil nicht auf eine Klasseneigenschaft zugegriffen wird, sonder direkt auf ein Klassenfeld. (3) Die Klasse samt ihren Klassenfeldern kannst du nicht freigeben. Ein Objekt dieser Klasse kannst du mit Free() freigeben. Der Übersetzer hält dich nicht davon ab, dass du den freigegebenen Objektzeiger weiter verwendest, aber das Ergebnis zur Laufzeit kann unterschiedlich ausfallen, jenachdem ob der ursprünglich belegte Speicher noch den alten Inhalt aufweist oder nicht. Mit FreeAndNil(obj) anstelle von obj.Free kannst du einen solchen Objektzeiger (von Dijkstra einmal dangling pointer genannt) zurücksetzen, so dass zumindest die Laufzeitfehlermeldung aussagekräftiger wird. Grüße vom marabu |
Re: Fragen zum Singelton Entwurfsmuster
Mal ein paar Fragen am Rande:
class procedure/class function kannte ich bereits, aber "class var" ist mir neu. Ist das so eine Art globale Variable, auf die man nur innerhalb der Klasse zugreifen kann? Sowas kenne ich nämlich von PHP (habs aber noch nie gebraucht :wink:). Das gibt es aber erst seit D2006, oder? :gruebel: Achja, was sind überhaupt "Singleton-Patterns", habe ich noch nie von gehört? |
Re: Fragen zum Singelton Entwurfsmuster
@marabu: Danke für die Erklärung. Jetzt ist es mir ein bisschen klarer.
@NamenLozer Patterns sind Entwursmuster. Das sind Lösungsvorschläge, Anleitungen, fest definierte Vorlagen, um irgendein Standardproblem zu lösen. Das Singleton-Pattern ist ein Muster das dafür sorgt, sicherzustellen, das dieses Objekt nur einmal angelegt werden kann. Alles besser Erklärt bei ![]() |
Alle Zeitangaben in WEZ +1. Es ist jetzt 01:52 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz