Beispiel:
Delphi-Quellcode:
interface
type
IPool = interface
.. blabla
end;
function NPool: IPool;
implementation
type
TPool = class(TInterfacedObject, IPool);
.. blabla
end;
function NPool: IPool;
var
Pool: IPool = nil;
begin
if Pool = nil then Pool := TPool.Create;
Result := Pool;
end;
Hier wird eine globale Variable Pool benutzt die aber nur in der Zugriffsfunktion NPool lokal sichtbar ist. Sinn und Zweck dieser Art der Programmierung war es:
1.) das Objekt TPool nur zu erzeugen wenn es gerbraucht wird, dann aber automatuisch
2.) die Funktion NPool: IPool dient als Zugriffs-Schutz-Funktion auf die Variable Pool
3.) es darf pro Anwednungssession nur EINE Kopie von Pool geben
4.) einmal Pool alloziert so darf er nie wieder DEALLOZIERT werden, das ist eine sehr WICHTIGE Rahmenbedingung
Nun, hätte man Pool ganz global deklariert so ist es aber möglich das der Delphi Compiler so smart ist diese globale Variable in der Finalisation Sektion auf NIL zu setzen ! Und genau dies widerspräche der Forderung 4.)
Ergo: in diesem Falle ist der Weg über eine globale Variable die aber nur lokal sichtbar sein darf der einzigste Weg der die geforderten Rahmenbedingungen erfüllen kann.
Fazit: das der Programmierer dieses Weg gewählt hat zeugt davon das er die Funktionalität seines Werkzeuges sehr genau kannte und auch ausgenutzt hat. Und das er das absichtlich so getan hat ist sein Stil.
Gruß Hagen