Hallo,
Ein Singleton-Pattern lässt sich in Delphi durchaus mit hilfe von statischen Methoden und typisierten Konstanten realisieren.
Und so sieht ein Singleton aus, wenn ich ihn mir vom Modelmaker generieren lasse:
Delphi-Quellcode:
type
TTest =
class(TObject)
protected
constructor CreateInstance;
class function AccessInstance(Request: Integer): TTest;
public
constructor Create;
destructor Destroy;
override;
class function Instance: TTest;
class procedure ReleaseInstance;
end;
constructor TTest.Create;
begin
inherited Create;
raise Exception.CreateFmt('
Access class %s through Instance only', [ClassName]);
end;
constructor TTest.CreateInstance;
begin
inherited Create;
end;
destructor TTest.Destroy;
begin
if AccessInstance(0) = Self
then AccessInstance(2);
inherited Destroy;
end;
class function TTest.AccessInstance(Request: Integer): TTest;
{$J+}
const FInstance: TTest =
nil;
{$J-}
begin
case Request
of
0 : ;
1 :
if not Assigned(FInstance)
then FInstance := CreateInstance;
2 : FInstance :=
nil;
else
raise Exception.CreateFmt('
Illegal request %d in AccessInstance', [Request]);
end;
Result := FInstance;
end;
class function TTest.Instance: TTest;
begin
Result := AccessInstance(1);
end;
class procedure TTest.ReleaseInstance;
begin
AccessInstance(0).Free;
end;
grüße, daniel