AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Thema durchsuchen
Ansicht
Themen-Optionen

Hilfklasse

Ein Thema von freimatz · begonnen am 25. Mai 2022 · letzter Beitrag vom 30. Mai 2022
 
Blup

Registriert seit: 7. Aug 2008
Ort: Brandenburg
1.493 Beiträge
 
Delphi 12 Athens
 
#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
 


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 21:17 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz