VCL vs. Observerpattern



  • Guten Morgen alle zusammen,

    ich schreibe aktuell an einer Komponente die Daten aus dem Netzwerk empfängt. Diese Komponente soll später andere Klassen, Komponenten darüber informieren wenn neue Daten vorhanden sind. Da dachte ich mir, das sich das Observerpattern geradezu aufdringt. Hierzu hab ich eine Basisklasse Observable implementiert. Diese Klasse soll als Schnittstelle dienen. Meine Komponente, welche die Netzwerkdaten pollt sollte diese Schnittstelle nun implementieren (davon erben). Leider erbt jedoch jedes Package von automatisch von TComponenten und sobald eine Klasse von einer VCL Klasse erbt, kann ich keine Mehrfachvererbung mehr nutzen. Ja ich bin mir bewusst das Mehrfachvererbung böse ist. Aber ich will die Basisklasse hier nur nutzen um eine einheitliche Schnittstelle zu erhalten. Hat jemand einen Idee wie ich das ganze lösen könnte?



  • Eine Möglichkeit besteht darin die Observable-Klasse zwischen TComponent und der konkreten Klasse zu packen.



  • witte schrieb:

    Eine Möglichkeit besteht darin die Observable-Klasse zwischen TComponent und der konkreten Klasse zu packen.

    Also Observable von TComponente erben lassen?



  • Ja, allerdings verklebst du dann zwei Dinge die nichts miteinander zu tun haben. Vllt wartest du auch bis die anderen aufgestanden sind und bessere Ideen haben.



  • sirchillalot schrieb:

    Hierzu hab ich eine Basisklasse Observable implementiert. Diese Klasse soll als Schnittstelle dienen. Meine Komponente, welche die Netzwerkdaten pollt sollte diese Schnittstelle nun implementieren (davon erben). Leider erbt jedoch jedes Package von automatisch von TComponenten und sobald eine Klasse von einer VCL Klasse erbt, kann ich keine Mehrfachvererbung mehr nutzen.

    Du kannst durchaus von mehreren abstrakten Klassen erben, sofern diese nur den Beschränkungen von Delphi-Interfaces entsprechen. Das heißt: nur rein virtuelle Methoden, keine Felder. Wenn du dem Interface dann noch eine UUID gibst, ist es ein COM-Interface, und du kannst es auch zur Laufzeit mittels TObject::GetInterface() abfragen.



  • audacia schrieb:

    sirchillalot schrieb:

    Hierzu hab ich eine Basisklasse Observable implementiert. Diese Klasse soll als Schnittstelle dienen. Meine Komponente, welche die Netzwerkdaten pollt sollte diese Schnittstelle nun implementieren (davon erben). Leider erbt jedoch jedes Package von automatisch von TComponenten und sobald eine Klasse von einer VCL Klasse erbt, kann ich keine Mehrfachvererbung mehr nutzen.

    Du kannst durchaus von mehreren abstrakten Klassen erben, sofern diese nur den Beschränkungen von Delphi-Interfaces entsprechen. Das heißt: nur rein virtuelle Methoden, keine Felder. Wenn du dem Interface dann noch eine UUID gibst, ist es ein COM-Interface, und du kannst es auch zur Laufzeit mittels TObject::GetInterface() abfragen.

    Meinst du mit Feldern Membervariablen? Die bräuchte ich eigentlich schon 🙂



  • sirchillalot schrieb:

    Meinst du mit Feldern Membervariablen?

    Ja.

    sirchillalot schrieb:

    Die bräuchte ich eigentlich schon 🙂

    Vielleicht ist der Weg über ein Multicast-Event sinnvoller, gerade weil es besser ins Property-Method-Event-Paradigma paßt.



  • Habs jetzt ganz anderst gelößt. Trotzdem Danke an alle die geholfen haben.


Anmelden zum Antworten