Einzelnen Beitrag anzeigen

GroHae

Registriert seit: 19. Apr 2007
Ort: Nabburg
83 Beiträge
 
Delphi 2007 Enterprise
 
#1

Frage zum Decorator Muster

  Alt 4. Jul 2007, 22:28
Hallo zusammen,

ich arbeite mich gerade durch das Buch "Entwurfsmuster von Kopf bis Fuß" Die Beispiel sind allerdings in Java

ich hab jetzt folgenden Code

Delphi-Quellcode:
unit Unit2;

interface

   type

   Getraenk = class abstract (TObject)
      Beschreibung : string;
      constructor Create;
      function GetBeschreibung : string;
      function Preis : Real; virtual; abstract;
   end;


   ZutatenDekorierer = class abstract (Getraenk)
      function GetBeschreibung : string; virtual; abstract;
   end;


// Konkrete Komponente (Kaffesorten)

   Espresso = class (Getraenk)
      constructor Create;
      function Preis : Real; override;
   end;

   Hausmischung = class (Getraenk)
      constructor Create;
      function Preis : Real; override;
   end;

   DunkleRoestung = class (Getraenk)
      constructor Create;
      function Preis : Real; override;
   end;

// konkrete Dekoriere (Zutaten)

   Schoko = class(ZutatenDekorierer)
     ActGetraenk : Getraenk;
     constructor Create(iGetraeng:Getraenk);
     function GetBeschreibung : string; override;
     function Preis : Real; override;
   end;

   HeisseMilch = class(ZutatenDekorierer)
     ActGetraenk : Getraenk;
     constructor Create(iGetraeng:Getraenk);
     function GetBeschreibung : string; override;
     function Preis : Real; override;
   end;

implementation

uses Dialogs;

{ Getraenk }

constructor Getraenk.Create;
begin
  Beschreibung := 'Unbekanntes Getränk';
end;

function Getraenk.GetBeschreibung: string;
begin
  result := Beschreibung;
end;

{ Espresso }

constructor Espresso.Create;
begin
  Beschreibung := 'Espresso';
end;

function Espresso.Preis: Real;
begin
  result := 1.99;
end;

{ Hausmischung }

constructor Hausmischung.Create;
begin
  Beschreibung := 'Hausmischung';
end;


function Hausmischung.Preis: Real;
begin
  result := 0.89;
end;

{ DunkleRoestung }

constructor DunkleRoestung.Create;
begin
  Beschreibung := 'Dunkle Röstung';
end;

function DunkleRoestung.Preis: Real;
begin
  Result := 0.99;
end;

{ Schoko }

constructor Schoko.Create(iGetraeng: Getraenk);
begin
// ShowMessage(iGetraeng.Beschreibung);
  ActGetraenk := iGetraeng;
end;

function Schoko.GetBeschreibung: string;
begin
  result := ActGetraenk.GetBeschreibung + ', Schoko';
end;

function Schoko.Preis: Real;
begin
  result := ActGetraenk.Preis + 0.20;
end;

{ HeisseMilch }

constructor HeisseMilch.Create(iGetraeng: Getraenk);
begin
  ActGetraenk := iGetraeng;
end;

function HeisseMilch.GetBeschreibung: string;
begin
  Result := ActGetraenk.Beschreibung + ', Heiße Milch';
end;

function HeisseMilch.Preis: Real;
begin
  result := ActGetraenk.Preis + 0.10;
end;


end.
Wenn ich jetzt

Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var
  Getraenk1 : Getraenk;
begin
  Getraenk1 := DunkleRoestung.Create;
  Getraenk1 := Schoko.Create(Getraenk1);
  Getraenk1 := Schoko.Create(Getraenk1);
  Getraenk1 := HeisseMilch.Create(Getraenk1);
  ShowMessage(Getraenk1.GetBeschreibung + ' ' + format('%f',[Getraenk1.Preis]));
end;
bekomme ich keine Bezeichnung angezeigt. Eigentlich sollte "HeisseMilch, Schoko, Schoko Dunkle Röstung" + Preis angezeigt werden.
Ich bekomme aber nur den Preis. Wenn ich die Dekoriere weg lasse und nur sage

Delphi-Quellcode:
procedure TForm1.Button1Click(Sender: TObject);
var
  Getraenk1 : Getraenk;
begin
  Getraenk1 := DunkleRoestung.Create;
  ShowMessage(Getraenk1.GetBeschreibung + ' ' + format('%f',[Getraenk1.Preis]));
end;
bekomme ich den Text Dunkle Röstung angezeigt.

Ich versteh's nicht
Grüße

Thomas
  Mit Zitat antworten Zitat