Einzelnen Beitrag anzeigen

FredlFesl

Registriert seit: 19. Apr 2011
293 Beiträge
 
Delphi 2009 Enterprise
 
#14

AW: unterschiedliche Klassen variabel instanzieren

  Alt 22. Jul 2011, 06:26
Meinst du so ?

Delphi-Quellcode:
unit Unit1;
constructor TKlasse.Create(const ATyp: integer);
begin
  if ATyp=1 then Self:= TKlasse1.Create;
  if ATyp=2 then Self:= TKlasse2.Create;
end;
Sowas würde ich nicht machen, denn die Grundklasse muss ja dann wissen, welche Ableitungen es gibt und geben wird. Die Basisklasse muss jedesmal erweitert werden, wenn eine Ableitung hinzukommt. => Verstoß gegen Grundregeln der OOP.

Sondern sowas:
Delphi-Quellcode:
Type
  TKlasseClassFactory = Class
    Class Function CreateKlasse (ATyp : Integer) : TKlasse;
  End;

Class Function TKlasseClassFactory.CreateKlasse (ATyp : Integer) : TKlasse;
Begin
  Case ATyp Of
    1 : Result := TKlasse1.Create;
    2 : Result := TKlasse2.Create;
End;
Viel besser, denn die Basisklasse wird nicht mehr angefasst. Du kannst Dir auch eine allgemeine Classfactory bauen, die in einer TClasslist (wozu gibt es die wohl?) je nach ATyp den entsprechenden Eintrag liefert.

Normalerweise ist ein 'case' Konstrukt ein indiz für schlechtes OOP, denn in einer Methode werden -je nach Wert- unterschiedliche Aktionen ausgelöst. Hier ist das jedoch erlaubt.

Ich würde übrigens aus dem 'ATYP' einen Enumerationswert machen oder zumindest die 'magic numbers' 1 und 2 als Konstante deklarieren.
Das Bild hängt schief.
  Mit Zitat antworten Zitat