![]() |
AW: Observer-Pattern Implementation
Bitte :)
Das ist aber gar nicht nötig, sondern eher unschön. Die TInterfacedList wird dir nicht einfach zerstört. Dafür ist es wichtig zu wissen, wann Interfaces mit Referenzenzähler zerstört werden. Als erstes muss der Referenzzähler aktiv sein. Bei einem TComponent wurde das zum Beispiel deaktiviert, doch die TInterfacedList ist abgeleitet von TInterfacedObject und dort werden die Referenzen gezählt. Es scheint also, als wäre die TInterfacedList gefährlich, dem ist aber nicht so. Das Objekt wird zerstört, wenn die Referenz inkrementiert wurde und danach wieder den RefCount 0 erreicht. Wenn du den RefCount nicht erhöhst, wird auch nichts zerstört. Um jetzt das TMBSubject zu zerstören, müsste man sich blöd anstellen. Man müsste nämlich auf die TInterfaceList mit einer Interface-Referenz zugreifen. Sprich man müsste die Liste über IInterfaceList steuern. Das ist einerseits daneben, denn man hat ja die Liste als Objekt, da muss man nicht noch eine Referenz eines Interfaces ansprechen, andererseits ist das auch nicht möglich, denn die InterfacedList ist im private Teil und alle Operationen auf dieser Liste werden in TMBSubject erledigt. Folglich wird dir nicht einfach irgendwas zerstört und das Ganze ist sicher im Gebrauch, sonst hätte die TInterfacedList überhaupt keine Existenzberechtigung. Wenn man die Liste zerstören möchte, müsste man in TMBSubject soetwas machen:
Delphi-Quellcode:
Anstelle von diesem ,,normalen" Vorgehen
procedure TMBSubject.ClearObservers;
var MeineListeAlsInterfacec: IInterfaceList; begin if Supports(FObservers,IInterfaceList,MeineListeAlsInterfacec) then begin MeineListeAlsInterfacec.Clear; end; end;
Delphi-Quellcode:
procedure TMBSubject.ClearObservers;
begin FObservers.Clear; end; |
AW: Observer-Pattern Implementation
Zitat:
|
AW: Observer-Pattern Implementation
Also...runtergezogen hab ich mir mal die JS-Variante. Da ich die letzen Jahre Web-Programmierung gemacht habe (php,js,html,css usw..) war das die Sprache die mir noch am vertrautesten ist.
War aber auch erstmal etwas geschockt...6 MB JS-Source (gezipt !) is ne menge holz. Habe aber doch den Core schonmal etwas überflogen und das ein oder andere Feature entdeckt :) (Dummerweise hab ich dann den Examples-Ordner entdeckt...und Alphabetinvasion...:lol:) Allerdings hab ich den Eindruck gewonnen, das man hier eine Eierlegende Wollmilchsau versucht zu programmieren. Und aus Erfahrung kann ich sagen, das das über kurz oder lang schief läuft. Als Ideen und Anregungs-Pool wirds erstmal bleiben, aber nach Delphi werd ich das garantiert nicht portieren :) (Okokok.....ich geb zu...es bleibt wegen Alphabetinvasion:-D) |
Alle Zeitangaben in WEZ +1. Es ist jetzt 11:29 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