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:
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;
Die Implementierung ist ja trivial.
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:
// Alte Deklaration:
// TDataViewer = Class (TObject)
// Neue Deklaration
TDataViewer = Class (TInterfacedObject, IObserver)
Procedue Changed (Sender : TObject); // Neue Methode, implementiert IObserver
...
So einen DataViewer soll man dann mit einem einfachen Subscribe(aDataViewer) o.ä. anmelden können. Wie würdet ihr da vorgehen?