Wenn das ein paar Zeilen sind, hast du denn eine Implementierung hierfür?
Deine ist ja keine Lösung und die im Netz verkürzen das Problem auf eine Methode die überladen wird.
Sicher eine Lösung aber danach hab ich ja nicht gefragt.
Klar ist das eine Lösung...
Der Factory müssen die Implementationen bekannt sein...
Ob die an der Factory registriert werden und in einem Dictionary gespeichert oder ob die Factory ne große Case hat... Kommt unterm Strich aufs selbe raus...
Beispiel: Datenbankverbindung...
Unit A will Datenspeichern...
Dafür bietet
Unit B ein Interface
Unit C ist die Factory...
Unit A linkt nur gegen
Unit B und
Unit C
Unit C kennt die Implementationen
Unit D -> Speichert in lokaler Datenbank
Unit E -> Speichert auf Server per REST,
SOAP oder was auch immer...
Unit C kennt D & E (Case/If Fall)
Unit C kennt nix bietet aber eine Registirerungsmethode (Beispiel Plattformservices)
Unit A sagt:
IDatenbank := UnitC.DatenbankFactory('Local');
oder
IDatenbank := UnitC.DatenbankFactory('Remote');
Jetzt kann UnitC anhand des Strings die richtige Implementation liefern...
Es gibt noch eine weitere Implementation.. ggf. in Zukunft?
Delphi-Quellcode:
IDatenBank := UnitC.DatenbankFactory('Cloud');
if IDatenbank = NIL
raise ENotImplemented.Create('Cloud-Datenbank ist nicht implementiert');
bzw:
Delphi-Quellcode:
IDatenBank := UnitC.DatenbankFactory<DatenbankInterface>('Cloud');
if IDatenbank = NIL
raise ENotImplemented.Create('Cloud-Datenbank ist nicht implementiert');
Mavarik