Introduction
Ces instructions portent sur la conception des JavaBeans et les différents choix qui s'offrent à un concepteur.
Pour plus d'informations sur les JavaBeans, reportez-vous à Concept :
JavaBeans.
Les propriétés des JavaBeans
La valeur d'une propriété peut être stockée en interne en tant que zone privée et elle peut aussi se calculer. Le
concepteur peut faire un pré-comptage de cette valeur ou une évaluation retardée, où la valeur sera uniquement calculée
lorsqu'un appelant en fera la demande.
Il peut aussi lier la propriété ou lui imposer des contraintes. Dans l'un ou l'autre cas, le concepteur doit alors
décider du mécanisme à utiliser concernant les événements et la notification.
Evénements et notification
Pour implémenter le mécanisme de notification, deux choix s'offrent au concepteur :
-
Utiliser les classes PropertyChangeSupport et PropertyChangeEvent du package java.beans.
-
Créer un mécanisme de notification personnalisée.
Les classes du package java.beans fournissent une implémentation qui s'applique dans la plupart des situations.
La classe PropertyChangeEvent contient la référence à l'objet qui a mis l'événement (modification de propriété)
en application, le nom de la propriété sous forme de chaîne et deux objets représentant la nouvelle et l'ancienne
valeur de la propriété. La classe PropertyChangeSupport gère une collection de PropertyChangeListeners et
contient le code de la notification dans la méthode firePropertyChange.
La classe PropertyChangeSupport est couramment utilisée pour les JavaBeans qui composent une partie des
interfaces utilisateur.
La notification personnalisée est appropriée s'il faut réduire le temps système de la création d'objets événement.
L'inconvénient est qu'il faut implémenter le mécanisme de notification. L'implémenteur de la notification personnalisée
doit garder à l'esprit qu'une unité d'exécution différente peut ajouter ou supprimer des écouteurs pendant le processus
de notification. Afin de fournir le comportement qui convient, la plupart des solutions créent une copie de la
collection contenant les écouteurs ; la notification est alors réalisée à partir de cette copie. La plupart des
implémentations publiées créent cette copie au début du processus de notification, ce qui crée beaucoup de copies et de
performances dégradées. Cependant, les notifications étant plus courantes que l'ajout ou la suppression d'écouteurs,
une copie à durée de vie longue peut être créée à l'avance pendant l'ajout ou la suppression des écouteurs puis
réutilisée pour les notifications, permettant un fonctionnement plus rapide.
Compte tenu de la productivité des développeurs, on devrait avoir recours à la notification personnalisée uniquement
lorsque les performances de la prise en charge du changement de propriété du package java.beans s'avèrent être
le goulot d'étranglement.
Les exemples suivants démontrent l'utilisation de la prise en charge du changement de la propriété à partir du package
java.beans et l'utilisation du mécanisme de notification personnalisée.
Exemple : JavaBean Tank utilisant java.beans.PropertyChangeSupport
Nous avons ici un JavaBean représentant un Tank (réservoir) qui a une propriété liée : level (niveau).
Lorsque l'on change le niveau du réservoir, ce réservoir met en application la classe
PropertyChangeEvent qui est gérée par l'objet TankController.
Exemple : JavaBean Tank utilisant la notification personnalisée
Dans l'exemple suivant, la classe Tank est implémentée à l'aide d'un mécanisme de notification personnalisée
plus efficace qui évite de créer des objets pendant la notification.
|