AGB  ·  Datenschutz  ·  Impressum  







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

Frage zum Decorator Muster

Ein Thema von GroHae · begonnen am 4. Jul 2007 · letzter Beitrag vom 5. Jul 2007
 
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
 


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 00:22 Uhr.
Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz