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.