Moin,
also zum thema observer ist dies vielleicht nützlich:
http://www.delphipraxis.net/internal...erver&start=15
Zitat von
VizeTE:
Zitat von
maximov:
Willst du mit interfaces arbeiten, oder komplett ohne?
Prinzipiell habe ich nichts gegen Interfaces, aber bisher habe ich nicht die Notwendigkeit dazu erkannt.
Das geht schneller als man denkt
Zitat:
Zitat von
maximov:
Ich würd das dann so machen, dass dein objekt lediglich eine beziehung zur deiner liste hast. Beim einfügen in die liste wird im objekt ein observer registriert, sodass die die liste benachrichtigt wird, sobald sich das objekt zerstört. Wird das objekt normal aus der liste entfernt, so kann es den der observer auch wieder aus dem objekt entfernt werden.
Mit der Theorie des Observers bin ich (noch) nicht vertraut. Bisher läuft das bei mir folgendermaßen:
Das Listenelement kennt die Liste zu der es gehört. Beim löschen eines Elements aus der Liste wird eine Event aufgerufen. Wird dort festgestellt das das Listenelement zu dieser Liste gehört wird es freigegeben, sonst wird nur der Eintrag in der Liste gelöscht.
Nach meinem Verständnis klingt diese Lösung ähnlich wie der Observer. Allerdings scheint der Observer ein extra Objekt zu sein?!
Ja, aber was ist, wenn erst das objekt freigegeben wird und die listen benachrichtigt werden müssen? Da jetzt aber das objekt in vielen listen steckt, reicht ein einfahces event nicht aus. Genau dafür wäre der Observer gut. Da könntest du auch ein
multi-cast-event als observer nehmen. Oder du definierst ganz klar, dass objekte nur über listen freigegeben werden dürfen und selbst dann würde es nicht funktionieren, da die Owner-liste das objekt ja freigeben kann und dann alle anderen listen vor dem problem stehen. Also brauchst du mindestens eine liste, mit den listen, in dem ein objekt steck...und dann hast du auch schon fast einen Observer.
Zitat:
Zitat von
maximov:
...Alle listen haben immer ihr objekt als owner, sodass sie evtl. benachritigungen an ihn weiter geben können.
Das kapier ich noch nicht so recht. Alle Listen sollen sich selbst als Owner haben? Damit sie dem Observer sagen können was mit ihnen passiert und der Observer die Elemente freigibt? Bisher habe ich dafür gesorgt das für jedes Element das oben genannte Event zum entfernen aufgerufen wird. Child-Elemente werden somit freigegeben.
Naja, du sagtest ein Objekt könne mehrere listen haben, also ist es logisch eine seperate listen-klasse zu haben, die dann beliebig oft von einem objekt aggregiert werden kann. also:
objekt != liste
mâxîmôv.
{KDT}