Einzelnen Beitrag anzeigen

alzaimar
(Moderator)

Registriert seit: 6. Mai 2005
Ort: Berlin
4.956 Beiträge
 
Delphi 2007 Enterprise
 
#11

Re: Interfacelisten: Objekt wird bei remove freigegeben

  Alt 13. Aug 2009, 13:14
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?
"Wenn ist das Nunstruck git und Slotermeyer? Ja! Beiherhund das Oder die Flipperwaldt gersput!"
(Monty Python "Joke Warefare")
  Mit Zitat antworten Zitat