Einzelnen Beitrag anzeigen

Benutzerbild von Mavarik
Mavarik

Registriert seit: 9. Feb 2006
Ort: Stolberg (Rhld)
4.130 Beiträge
 
Delphi 10.3 Rio
 
#15

AW: Beliebige Klasse instanzieren

  Alt 28. Okt 2015, 22:02
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
  Mit Zitat antworten Zitat