Zitat von
Andreas H.:
Wie funktioniert das Ganze, wenn eine Klasse eine weitere Klasse instanziert und beide sind kundenspezifisch?
Dann muss die Factory in jedem Konstruktor realisiert sein?
Äh, die Frage verstehe ich noch nicht ganz. Wo genau wird denn die andere instanziierte Klasse verwendet? Die Factory wird übrigens keineswegs in einem Konstruktor realisiert!
Ganz allgemein nochmal an einem Beispiel:
Delphi-Quellcode:
type
TBaseClass = class(TObject)
public
procedure doFoo(); virtual; abstract;
end;
TClass1 = class(TBaseClass)
public
procedure doFoo(); override;
end;
TClass2 = class(TBaseClass)
private
s: TStrings;
public
procedure doFoo(); override;
end;
So, die Implementierungen kannst Du beliebig wählen. TClass2 verwendet intern eine weitere Klasse (TStrings), wird eben auch irgendwann mal instanziiert (denk Dir das sauber mit Konstruktor und Destruktor). Natürlich kann jetzt TClass2 ohne Probleme eine beliebige Anzahl von Klassen verwenden, solange die nur intern benötigt werden.
Eine Fabrik hätte dann noch die folgende Form (bzw. könnte die folgende Form haben):
Delphi-Quellcode:
type
TBaseClassFactory = class(TObject)
public
class function getNewInstance(): TBaseClass;
end;
Als class function hier definiert, damit Du keine Instanz benötigst, kannst einfach TBaseClassFactory.getNewInstance() schreiben. Intern wird dann eben einer der Nachfahren instanziiert und zurückgegeben (die Auswahl kann über alles mögliche geschehen, man könnte auch einen Parameter im Konstruktor übergeben!).