nehme an, ich habe einen TModel:Allgemein Fabrik
TModelClass = class of TModel;
TModel = class
procedure DoSomeStuff;
end;
und 2 Nachkommen:
TModel_A = class(TModel);
TModel_B = class(TModel);
und eine Fabrik:
TModelFactory = class
class function CreateModel_A: TModel_A;
class function CreateModel_B: TModel_B;
end;
Jetzt möchte ich ein wenig Refactoring:
TModelFactory = class
class function CreateGenericModel(Model: TModelClass) : TModel
end;
class function TModelFactory.CreateGenericModel(Model: TModelClass) : TModel
begin
...
case Model of
TModel_A: Result := TModel_A.Create;
TModel_B: Result := TModel_B.Create;
end;
...
end;
Bisher ist es in Ordnung, aber jedes Mal, wenn ich einen TModel
Nachkommen erzeuge, muss ich die Fabrik case
Anweisung ändern.
Meine Frage: Ist das möglich, eine 100% generische Fabrik für alle meine TModel
Nachkommen zu schaffen, so dass jedes Mal, wenn ich schaffen ein TModel
Nachkommen Ich muss TModelFactory
nicht ändern?
Ich habe versucht, mit Delphi 2009 Generika zu spielen, fand aber keine wertvollen Informationen, alle sind im Zusammenhang mit der grundlegenden Verwendung von TList<T>
und so weiter.
aktualisiert Sorry, aber vielleicht bin ich nicht klar oder nicht verstehe Ihre Antwort (Ich bin immer noch ein noob), aber was ich versuche zu erreichen:
var
M: TModel_A;
begin
M: TModelFactory.CreateGenericModel(MY_CONCRETE_CLASS);
Hallo Malcolm, danke für Ihre Antwort.Ich habe versucht, Ihre sehr elegante Lösung zu implementieren, aber ich stieß auf ein Speicherleck. Ich habe einen Kommentar auf Ihrem Blog Beitrag – Fred
Vielen Dank Fred, Ja, es war ein Fehler im TestGetInstance Test, nicht in der Fabrik selbst. Ich habe den Download repariert, also solltest du jetzt gut sein. –
Danke Malcolm für dein Update. – Fred