Einführung
Diese Richtlinie konzentriert sich auf das Design von JavaBeans und die verschiedenen Auswahlmöglichkeiten, unter denen
ein Designer wählen kann.
Nähere Informationen zu JavaBeans finden Sie unter Konzept:
JavaBeans.
Eigenschaften der JavaBean
Intern kann ein Eigenschaftswert als privates Feld gespeichert werden, er kann jedoch auch berechnet werden. Der
Designer hat die Möglichkeit, den Wert der Eigenschaft im voraus zu berechnen, oder die Berechnung nach Bedarf zu
verwenden, wobei der Wert nur dann berechnet wird, wenn er von einem Aufrufer angefordert wird.
Der Designer hat außerdem die Möglichkeit, die Eigenschaft zu binden oder durch Bedingungen einzuschränken. Wird eine
Eigenschaft gebunden oder durch Bedingungen eingeschränkt, dann muss der Designer den Mechanismus für Ereignisse und Benachrichtigungen festlegen.
Ereignisse und Benachrichtigungen
Zur Implementierung des Benachrichtigungsmechanismus stehen dem Designer zwei Möglichkeiten zur Verfügung:
-
Er kann die Klassen PropertyChangeSupport und PropertyChangeEvent aus dem Paket java.beans
verwenden.
-
Er kann einen angepassten Benachrichtigungsmechanismus verwenden.
Die Klassen aus dem Paket java.beans bieten eine Implementierung, die in den meisten Fällen gültig ist.
PropertyChangeEvent enthält die Referenz auf das Objekt, das das Ereignis ausgelöst hat, den Namen der
Eigenschaft als Zeichenfolge (String) sowie zwei Objekte, die den alten und den neuen Wert der Eigenschaft darstellen.
Die Klasse PropertyChangeSupport verwaltet eine Gruppe von PropertyChangeListeners und enthält den Code
für die Benachrichtigung in der Methode firePropertyChange.
PropertyChangeSupport wird im allgemeinen für JavaBeans verwendet, die einen Teil der Benutzerschnittstellen
bilden.
Eine angepasste Benachrichtigung kann erforderlich sein, wenn der Systemaufwand für das Erstellen von Ereignisobjekten
verringert werden muss. Der Nachteil liegt darin, dass der Benachrichtigungsmechanismus vom Implementierer
implementiert werden muss. Der Implementierer der angepassten Benachrichtigung muss beachten, dass während des
Benachrichtigungsprozesses Listener von einem anderen Thread hinzugefügt oder entfernt werden können. Um das richtige
Verhalten zu erreichen, wird bei den meisten Lösungen eine Kopie der Listener-Gruppe erstellt. Die Benachrichtigung
findet dann unter Verwendung dieser Kopie statt. Die meisten veröffentlichten Implementierungen erstellen eine solche
Kopie zu Beginn des Benachrichtigungsprozesses. Dies führt dazu, dass viele Klone erstellt werden und die Leistung
vermindert wird. Weil die Benachrichtigungen jedoch häufiger stattfinden als das Hinzufügen oder Entfernen von
Listener, kann während dem Hinzufügen oder Entfernen der Listener eine langlebigere Kopie im voraus erstellt und
anschließend für die Benachrichtigungen verwendet werden. Auf diese Weise ist eine schnellere Ausführung möglich.
Berücksichtigt man die Produktivität der Designer, dann sollten angepasste Benachrichtigungen nur dann verwendet
werden, wenn erkennbar wird, dass die im Paket java.beans enthaltene Unterstützung für Eigenschaftenänderung
einen Leistungsengpass verursacht.
Das folgende Beispiel zeigt sowohl die Verwendung der im Paket java.beans enthaltenen Unterstützung für
Eigenschaftenänderung als auch die Verwendung der angepassten Benachrichtigung.
Beispiel: JavaBean Tank mit Verwendung von java.beans.PropertyChangeSupport
In diesem Beispiel wird eine JavaBean verwendet, die einen Tank darstellt und eine gebundene Eigenschaft
besitzt: level (Stand). Wenn der Stand (level) von Tank geändert wird, löst Tank das Ereignis
PropertyChangeEvent aus, das vom Objekt TankController gesteuert wird.
Beispiel: Java-Bean Tank mit Verwendung der angepassten Benachrichtigung
Im folgenden Beispiel wird die Klasse Tank mit einem angepassten, effizienteren Benachrichtigungsmechanismus
implementiert, der das Erstellen von Objekten während der Benachrichtigung vermeidet.
|