Weil der Typ TWerkzeug0 so was Ähnliches wie TCustomControl ist. Wirklich viel macht TWerkzeug0 noch nicht. Ich hab jetzt mal das vorbereitet. Ist an manchen Stellen eine Arbeitserleichterung. Wobei mich immer wundert daß man in Delphi "Bauer := TDame.Create" machen kann.
Delphi-Quellcode:
TWerkzeugFactory = class
private
FTyp: TGraphicTyp;
FWerkzeug: TWerkzeug0;
procedure SetTyp(const Value: TGraphicTyp);
procedure DoCreate;
procedure DoDestroy;
function GetWerkzeug1: TWerkzeug1;
function GetWerkzeug2: TWerkzeug2;
function GetWerkzeug3: TWerkzeug3;
function GetIsWerkzeug1: boolean;
function GetIsWerkzeug2: boolean;
function GetIsWerkzeug3: boolean;
public
property Typ: TGraphicTyp read FTyp write SetTyp;
property Werkzeug: TWerkzeug0 read FWerkzeug;
property Werkzeug1: TWerkzeug1 read GetWerkzeug1;
property Werkzeug2: TWerkzeug2 read GetWerkzeug2;
property Werkzeug3: TWerkzeug3 read GetWerkzeug3;
property IsWerkzeug1: boolean read GetIsWerkzeug1;
property IsWerkzeug2: boolean read GetIsWerkzeug2;
property IsWerkzeug3: boolean read GetIsWerkzeug3;
destructor Destroy; override;
end;
{ TWerkzeugFactory }
destructor TWerkzeugFactory.Destroy;
begin
DoDestroy;
inherited;
end;
procedure TWerkzeugFactory.DoCreate;
begin
if Util_IsWerkzeug1(FTyp) then
FWerkzeug := TWerkzeug1.Create
else
if Util_IsWerkzeug2(FTyp) then
FWerkzeug := TWerkzeug2.Create
else
if Util_IsWerkzeug3(FTyp) then
FWerkzeug := TWerkzeug3.Create
else
FWerkzeug := TWerkzeug0.Create;
end;
procedure TWerkzeugFactory.DoDestroy;
begin
if Assigned(FWerkzeug) then
begin
FWerkzeug.Free;
FWerkzeug := nil;
end;
end;
procedure TWerkzeugFactory.SetTyp(const Value: TGraphicTyp);
begin
DoDestroy;
FTyp := Value;
DoCreate;
end;
function TWerkzeugFactory.GetIsWerkzeug1: boolean;
begin
Result := FWerkzeug is TWerkzeug1;
end;
function TWerkzeugFactory.GetIsWerkzeug2: boolean;
begin
Result := FWerkzeug is TWerkzeug2;
end;
function TWerkzeugFactory.GetIsWerkzeug3: boolean;
begin
Result := FWerkzeug is TWerkzeug3;
end;
function TWerkzeugFactory.GetWerkzeug1: TWerkzeug1;
begin
if IsWerkzeug1 then
Result := TWerkzeug1(FWerkzeug)
else
Result := nil;
end;
function TWerkzeugFactory.GetWerkzeug2: TWerkzeug2;
begin
if IsWerkzeug2 then
Result := TWerkzeug2(FWerkzeug)
else
Result := nil;
end;
function TWerkzeugFactory.GetWerkzeug3: TWerkzeug3;
begin
if IsWerkzeug3 then
Result := TWerkzeug3(FWerkzeug)
else
Result := nil;
end;