Einzelnen Beitrag anzeigen

Bjoerk

Registriert seit: 28. Feb 2011
Ort: Mannheim
1.384 Beiträge
 
Delphi 10.4 Sydney
 
#24

AW: Setter mehrfach überschreiben.

  Alt 10. Jun 2015, 14:06
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;
  Mit Zitat antworten Zitat