Die Idee war eher folgende:
Delphi-Quellcode:
unit Singleton;
interface
type
TSingleton<T:
class,
constructor> =
class
private
class var FInstance: T;
class constructor Create;
class destructor Destroy;
public
class function NewInstance: TObject;
override;
class property Instance: T
read FInstance;
end;
implementation
uses
SysUtils;
class constructor TSingleton<T>.Create;
begin
FInstance := T.Create;
end;
class destructor TSingleton<T>.Destroy;
begin
FInstance.Free;
end;
class function TSingleton<T>.NewInstance: TObject;
begin
raise Exception.CreateFmt('
Instantiation of TSingleton<%s> not allowed', [T.ClassName]);
end;
end.
In einer anderen
unit wird dann z.B. TFooSingleton = class(TSingleton<TFoo>) deklariert und auch nur diese Klasse nach außen freigegeben. Auch die
unit Singleton sollte nicht im uses benutzt werden, sondern nur die, wo die konkrete Singleton-Klasse definiert wurde (in dem Beispiel TFooSingleton).