![]() |
Re: Interfacelisten: Objekt wird bei remove freigegeben
Eigentlich wollte ich ein minimalistisch kleines Observer-Pattern mit Interfaces implementieren, sodaß man beliebige Objekte nachträglich damit observieren kann. Dabei soll der Originalcode, also i.A. (Create->Process->Destroy) nicht verändert werden müssen.
Ich wollte dann nur ein Interface definieren, das die zu benachrichtigenden Klassen dann implementieren müssen.
Delphi-Quellcode:
Die Implementierung ist ja trivial.
Type
IObserver = interface Procedure Changed (Sender : TObject); End; TSubject = Class private fObserver : TInterfaceList; Public Procedure Subscribe (aObserver : IObserver); procedure Unsubscrive(aObserver : IObserver); Procedure Changed(Sender : TObject); // Ruft alle Observer in der fObserverListe auf End; Nun könnte man im existierenden Code einfach durch eine kleine Änderung an den Klassendeklarationen erreichen, das sie als Observer fungieren können.
Delphi-Quellcode:
So einen DataViewer soll man dann mit einem einfachen Subscribe(aDataViewer) o.ä. anmelden können. Wie würdet ihr da vorgehen?
// Alte Deklaration:
// TDataViewer = Class (TObject) // Neue Deklaration TDataViewer = Class (TInterfacedObject, IObserver) Procedue Changed (Sender : TObject); // Neue Methode, implementiert IObserver ... |
Re: Interfacelisten: Objekt wird bei remove freigegeben
Der TDataViewer sollte keine Referenzzählung durchführen, d.h. AddRef und Release leer implementieren. Man könnte auch eine Klasse zur Verfügung stellen, die IInterface entsprechend implementiert, und von der dann (anstatt von TInterfacedObject) abgeleitet werden kann.
|
Re: Interfacelisten: Objekt wird bei remove freigegeben
Ok, die Veränderung von TInterfacedObject (Referenzzählung überschreiben) wäre die Lösung. Danke.
|
Alle Zeitangaben in WEZ +1. Es ist jetzt 13:13 Uhr. |
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz