Registriert seit: 11. Okt 2003
Ort: Elbflorenz
44.071 Beiträge
Delphi 12 Athens
|
AW: Anonymous Methods für Sanduhr als Design Pattern
9. Dez 2015, 10:00
Oder andersrum, also in etwa so?
Delphi-Quellcode:
procedure Test1;
begin
THourGlass.Create;
// mach was
end; // THourGlass setzt sich am Funktions-Ende selber zurück
procedure Test2;
var
HourClass: IHourClass;
begin
HourClass := THourGlass.Create;
// mach was
HourClass := nil; // THourGlass manuell zurücksetzen
// mach nochwas
end;
Delphi-Quellcode:
type
IHourClass = IInterface;
THourGlass = class(TInterfacedObject {, IHourClass})
private class var
FInstances: Integer;
FOldCursor: TCursor;
public
class function Create: IHourClass; reintroduce; static;
destructor Destroy; override;
end;
class function THourGlass.Create: IHourClass;
begin
Result := inherited THourGlass.Create; //Result := THourGlass(NewInstance);
if InterlockedIncrement(FInstances) = 1 then
Result.FOldCursor := Screen.Cursor;
Screen.Cursor := crHourGlass;
end;
destructor THourGlass.Destroy;
begin
if InterlockedDecrement(FInstances) = 0 then
Screen.Cursor := FOldCursor;
inherited;
end;
Oder als externe function SetHourGlass: IHourGlass;
und die Klasse in Implementation verschieben/verstecken.
Bei der Funktion kann man das auch leichter als Singleton implementieren. (darf da nur nicht die globale Singleton-Instanz vergessen mitzuzählen)
Neuste Erkenntnis:
Seit Pos einen dritten Parameter hat,
wird PoSex im Delphi viel seltener praktiziert.
Geändert von himitsu ( 9. Dez 2015 um 10:05 Uhr)
|