Thema: Hilfklasse

Einzelnen Beitrag anzeigen

Blup

Registriert seit: 7. Aug 2008
Ort: Brandenburg
1.429 Beiträge
 
Delphi 10.4 Sydney
 
#6

AW: Hilfklasse

  Alt 25. Mai 2022, 15:30
Wenn die Struktur des IMonster-Interface und die zugrunde liegenden Klassen nicht verändert werden können, bau eine Fassade, die deinem Anwendungsfall gerecht wird.
Delphi-Quellcode:
unit Fassade;

interface

uses
  Graphics;

type
  TTyp = (Kreis, Quadrat);

  IMonster = interface(IInterface)
    function GetElementTyp: TTyp;
    function GetElementFarbe: TColor;
    function GetElementGroesse: Double;
    function GetReferenzTyp: TTyp;
    function GetReferenzFarbe: TColor;
    function GetReferenzGroesse: Double;
    {...}
    property ElementTyp: TTyp read GetElementTyp;
    property ElementFarbe: TColor read GetElementFarbe;
    property ElementGroesse: Double read GetElementGroesse;
    {...}
    property ReferenzTyp: TTyp read GetReferenzTyp;
    property ReferenzFarbe: TColor read GetReferenzFarbe;
    property ReferenzGroesse: Double read GetReferenzGroesse;
    {...}
  end;

  IElement = interface(IInterface)
    function GetTyp: TTyp;
    function GetFarbe: TColor;
    function GetGroesse: Double;
    {...}
    property Typ: TTyp read GetTyp;
    property Farbe: TColor read GetFarbe;
    property Groesse: Double read GetGroesse;
  end;

  IMonsterFassade = interface(IInterface)
    function GetElement: IElement;
    function GetReferenz: IElement;
    {...}
    property Element: IElement read GetElement;
    property Referenz: IElement read GetReferenz;
  end;

  TMonsterReferenz = class(TInterfacedObject)
    constructor Create(AParent: IMonster);
    destructor Destroy; override;
  protected
    FParent: IMonster;
  end;

  TElement = class(TMonsterReferenz, IElement)
    function GetTyp: TTyp;
    function GetFarbe: TColor;
    function GetGroesse: Double;
  end;

  TReferenz = class(TMonsterReferenz, IElement)
    function GetTyp: TTyp;
    function GetFarbe: TColor;
    function GetGroesse: Double;
  end;

  TMonsterFassade = class(TMonsterReferenz, IMonsterFassade)
    constructor Create(AParent: IMonster);
    destructor Destroy; override;
  private
    FElement: IElement;
    FReferenz: IElement;
  public
    function GetElement: IElement;
    function GetReferenz: IElement;
  end;

implementation


{ TMonsterReferenz }

constructor TMonsterReferenz.Create(AParent: IMonster);
begin
  inherited;
  FParent := IMonster;
end;

destructor TMonsterReferenz.Destroy;
begin
  FParent := nil;
  inherited;
end;

{ TElement }

function TElement.GetFarbe: TColor;
begin
  Result := FParent.GetElementFarbe
end;

function TElement.GetGroesse: Double;
begin
  Result := FParent.GetElementGroesse;
end;

function TElement.GetTyp: TTyp;
begin
  Result := FParent.GetElementTyp;
end;

{ TReferenz }

function TReferenz.GetFarbe: TColor;
begin
  Result := FParent.GetReferenzFarbe
end;

function TReferenz.GetGroesse: Double;
begin
  Result := FParent.GetReferenzGroesse;
end;

function TReferenz.GetTyp: TTyp;
begin
  Restlt := FParent.GetReferenzTyp;
end;

{ TMonsterFassade }

constructor TMonsterFassade.Create(AParent: IMonster);
begin
  inherited;
  FElement := TElement.Create(AParent);
  FReferenz := TReferenz.Create(AParent);
end;

destructor TMonsterFassade.Destroy;
begin
  FElement := nil,
  FReferenz := nil,
  inherited;
end;

function TMonsterFassade.GetElement: IElement;
begin
  Result := FElement;
end;

function TMonsterFassade.GetReferenz: IElement;
begin
  Result := FReferenz;
end;

end.
  Mit Zitat antworten Zitat