Le code que vous recherchez est java.beans.PropertyChangeSupport
. Vous l'utilisez comme ceci:
protected transient PropertyChangeSupport changeSupport = new PropertyChangeSupport (this);
public void addPropertyChangeListener (String propertyName, PropertyChangeListener listener)
{
changeSupport.addPropertyChangeListener (propertyName, listener);
}
public void removePropertyChangeListener (String propertyName, PropertyChangeListener listener)
{
changeSupport.removePropertyChangeListener (propertyName, listener);
}
public void firePropertyChange (String propertyName, BigDecimal oldValue, BigDecimal newValue)
{
if (oldValue != null && newValue != null && oldValue.compareTo (newValue) == 0) {
return;
}
changeSupport.firePropertyChange(new PropertyChangeEvent(this, propertyName,
oldValue, newValue));
}
Le principal avantage de cette API est qu'elle est connue de tous. Le principal inconvénient est que l'API Beans est assez ancienne, encombrante du point de vue d'aujourd'hui et très limitative.
Par exemple, vous avez besoin du nom d'une propriété dans plusieurs endroits. Cela signifie soit que vous devez copier une chaîne (qui casse si vous renommez la propriété), soit vous devez définir manuellement une constante String pour chaque champ qui est fastidieux.
La mise en œuvre elle-même est assez rapide et suit le modèle de conception Observer. Bien sûr, il existe d'autres façons de mettre en œuvre cela. Le prix serait que ce n'est plus un bean car il ne suit pas l'API. Par conséquent, vous ne pouvez pas utiliser votre objet dans de nombreux frameworks sans code de collage supplémentaire.
Oui. Mais j'ai vu EventListeners et Streams dans l'implémentation de ces PropertyChangeSupport. Donc, j'étais peu douteux, cela aura-t-il un coût de performance. C'est pourquoi je demandais s'il était correct de remplacer ceci par une implémentation de modèle médiateur. Que dire? – Jijoy
Généralement, si vous utilisez PropertyChangeListeners dans le code de l'interface utilisateur, la surcharge de performances lors de la délégation à PropertyChangeSupport sera imperceptible. – Adamski
Ok. Est-ce que les écouteurs de changement de propriété seront traités de la même manière que les écouteurs d'événement dans awt. Je veux dire, le programme devra-t-il s'en préoccuper? ou JVM fera l'affaire? – Jijoy