Einzelnen Beitrag anzeigen

NicoDE
(Gast)

n/a Beiträge
 
#10

Re: Instanz einer Klasse identifizieren?!

  Alt 3. Feb 2006, 10:18
Zitat von Der_Unwissende:
Allerdings kommt man beim Singleton Pattern (soviel ich weiß) nicht mehr um eine globale Variable herum.
Wird zwar eine sehr theoretische Diskussion; aber ich habe nichts gegen globale Variablen. Die Verwaltung und Sichtbarkeit sollte allerdings klar geregelt sein.
Nehmen wir zum Beispiel die GetInstance() einer möglichen Singleton-Implementation:
Delphi-Quellcode:
class function TFoo.GetInstance(): TFoo;
{$WRITEABLECONST ON}
const
  InstanceLock: Integer = Ord(False);
  Instance: TFoo = nil;
{$WRITEABLECONST OFF}
begin
  Result := Instance;
  if not Assigned(Result) then
  begin
    // Wait until lock is available
    while InterlockedExchange(InstanceLock, Ord(True)) = Ord(True) do
      Sleep(0);
    try
      // Create Instance if needed
      if not Assigned(Instance) then
        Instance := TFoo.Create();
      Result := Instance;
    finally
      // Release the lock
      InterlockedExchange(InstanceLock, Ord(False));
    end;
  end;
end;
Durch die Ausnutzung von {$WRITEABLECONST} sind die globalen Variablen nur innerhalb der Funktion sichtbar (und können nicht 'versehentlich' von 'außen' modifiziert werden).
  Mit Zitat antworten Zitat