Thema: Delphi Generics und Enums

Einzelnen Beitrag anzeigen

Benutzerbild von bernau
bernau

Registriert seit: 1. Dez 2004
Ort: Köln
1.268 Beiträge
 
Delphi 11 Alexandria
 
#17

AW: Generics und Enums

  Alt 12. Sep 2015, 12:24
Lies mal die von Günther verlinkte Diskussion, die behandelt das Thema nochmals.
Habe ich. Meiner Meinung nach wird hier mit Kanonenkugeln auf Spatzen geschossen.

Thema Stadtmusikanten:

Delphi-Quellcode:
TAnimal = (hund, katze, maus, affe, baer);
TAnimalSet = set of TAnimal;
TAnimalStadtMusikant = [hund, maus];
Wenn ich irgendwo ein Case habe, welches nur die Stadtmusikanten behandeln soll, dann schreibe ich folgendes.

Delphi-Quellcode:
if myAnimal in TAnimalStadtMusikant then
  begin
    case myAnimal of
      hund:TrittDenHund;
      maus:VerfuettereDieMaus;
    else
      MachException;
    end;
  end;
Nun wird TAnimal erweitert:

TAnimal = (hund, katze, maus, affe, baer, huhn); .

Der Code läuft, weil das neue Tier nichts mit den Stadtmusikanten zu tun hat.

Nun werden die Stadtmusikanten erweitert

TAnimalStadtMusikant = [hund, katze, maus]; Der Code wirft eine Exception.



Und nun dein Beispiel aus dem Thread;


Einfaches Beispiel: Pizza.
Delphi-Quellcode:
Type
  TPizza = (Margeritha, Funghi, QuatroStattione, MitWienerWurstUndSenf);

// Anstatt
Case Pizza of
  Margeritha: begin PackdieTomatesoßerauf; UndKäse; end;
  Funghi : begin PackdieTomatesoßerauf; Pilze; UndKäse; end;
  ...
...
  end;
//schreibt man
  PizzaFactory.CreateRecipe(Pizza).BelegDiePizza();
// Und dieser Code ändert sich dann niemals wieder.


Was spricht gegen:

Delphi-Quellcode:
type
  TPizzaToppics = (Tomatensosse, Kaese, Pilze, Salami, Pepperoni);
  TPizzaToppicsSet = set of TPizzaToppics;

const
  TPizzaBrot = [];
  TPizzaMargeritha = [Tomatensosse, Kaese];
  TPizzaFungi = [Tomatensosse, Kaese, Pilze];
  ...

Procedure TPizzaOfen.BelegDiePizza(TPizzaMargeritha);
Nun kannst du die So viele Pizzen zusammenstellen wie du willst. Alle Sorten stehen beisammen.

Der Code Selber muss nicht geändert werden. Ausser wenn neue Toppics hinzu kommen. Aber dann musst du auch bei dir den Code erweitern.
Gerd
Kölner Delphi Usergroup: http://wiki.delphitreff.de
  Mit Zitat antworten Zitat