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.