Java-Property Change Listener
Ich würde gerne wissen , wie die java-beans property change Listener funktionieren.
Verwenden Sie , EventListeners innen ?
Ist es gut zu verwenden , property change Listener, wenn wir dasselbe tun mit POJO-Umsetzung
der mediator pattern . Ich meine, Leistung klug ?
Dank
J
InformationsquelleAutor Jijoy | 2009-08-12
Du musst angemeldet sein, um einen Kommentar abzugeben.
Der Vorteil ist im Bereich der Kupplung. mediator erfordert, dass die Klassen sich bewusst sein, der mediator (z.B. durch Weitergabe der Vermittler-Instanz in den Konstruktor). Mediatoren können sehr mächtig sein, und kann auf jeden Fall effizienter Benachrichtigung - aber auf Kosten der erheblichen Komplexität.
Im Gegensatz dazu, die Beobachter design pattern (die JavaBeans-property change Listener sind eine Implementierung) sind viel einfacher zu implementieren. Aber Sie können interessante emergente Verhalten in komplexen Systemen.
Für viele Situationen der Beobachter ist mehr als ausreichend (vor allem in den Bereichen, JavaBeans neigen dazu, verwendet werden). In anderen Situationen ist es bei weitem nicht ausreichend - ein gutes Beispiel dafür ist der event-Ausbreitung im Verglaste Listen-Bibliothek. Sie aufgewickelt mit einem EventPublisher (was ist ein mediator) zu optimieren, Ereignis-Benachrichtigung, um, und sorgen dafür, dass Abhängigkeiten erfüllt werden, bevor Ereignisse propagieren.
Also, die Antwort auf Ihre Frage ist, dass dies nicht eine Frage der POJOs vs JavaBeans. Es ist eine Frage, welches design-pattern (Beobachter oder Vermittler) macht am meisten Sinn für einen bestimmten Anwendungsfall. Beide mustern den Fokus auf die Entkopplung Teile des Systems voneinander. Und beide Muster haben Situationen, in denen Sie angemessen sind. Für eine große Zahl von Situationen, der Observer ist einfach gut - und ist wirklich, wirklich einfach zu schreiben.
Sollte ich auch erwähnen, dass die Verwendung von intermediate-event-Objekte ist Häufig in beiden Beobachter und Vermittler Implementierungen, also das ist irgendwie eine Nebensache. Aber die moderne VMs sind sehr effizient im Umgang mit kurzlebigen Objekte - also es ist wirklich ein nicht-Thema.
InformationsquelleAutor Kevin Day
Den code, den Sie suchen, ist in
java.Bohnen.PropertyChangeSupport
. Verwenden Sie es wie folgt:Der Hauptvorteil der Verwendung dieser API ist, dass jeder ist vertraut mit es. Der größte Nachteil ist, dass die Bohnen API ist ziemlich alt, umständlich, aus heutiger Sicht sehr begrenzt.
Beispielsweise müssen Sie den Namen einer Eigenschaft, die in vielen Orten. Dies bedeutet entweder, müssen Sie eine Zeichenfolge kopieren (die breaks, wenn Sie benennen Sie die Eigenschaft) oder Sie müssen manuell definiert eine String-Konstante, die für jedes Feld was ziemlich mühsam ist.
Die Umsetzung selbst ist sehr schnell und folgt dem Observer-Entwurfsmuster. Natürlich, es gibt andere Wege, um dies zu implementieren. Der Preis wäre, dass diese nicht mehr die Bohne, da Sie nicht die Folgen der API. Daher können Sie nicht verwenden Sie Ihre Objekt in viele Rahmenbedingungen, ohne zusätzliche glue-code.
In der Regel, wenn Sie mit PropertyChangeListeners innerhalb von code der Benutzeroberfläche der performance-overhead bei der übertragung an PropertyChangeSupport werden unmerklich.
Ok. Ist die property change Listener behandelt werden gleichen Weise wie die eventlisteners innerhalb awt. Ich meine, wird das Programm haben, kümmern sich darum, dass es disposl ? oder JVM zu tun ?
Der Umgang mit Eigentum Ereignisse werden so schnell wie alles, was Sie mit oben kommen kann. Eigentum Ereignisse Verhalten sich wie jede andere Java-Objekt: sobald man keine Verwendung mehr hat, die garbage collection (GC) wird von Ihnen befreien. Im Gegensatz zu Dateien, die Sie nicht brauchen, zu "schließen".
seien Sie vorsichtig mit dem eingebauten java.Bohnen.PropertyChangeSupport - es verwendet .equals (), um zu bestimmen, wenn ein Ereignis verbreiten sollten. Das ist gut für unveränderliche Objekte, aber eine Katastrophe für Werte wie Listen, die könnte gleich sein (z.B. beide leer) an einem Punkt in der Zeit, aber nicht gleich, später.
InformationsquelleAutor Aaron Digulla