import java.beans.PropertyChangeEvent;
import java.beans.PropertyChangeListener;
import java.beans.PropertyChangeSupport;
public class Main {
public static void main(String[] args) throws InterruptedException {
POJO obj = new POJO();
/* Ajoute l'observateur */
ValuePropertyChangeListener change = new ValuePropertyChangeListener();
obj.addPropertyChangeListener("value", change);
/* Change la valeur toutes les secondes jusqu'à 5 */
for (int i = 1; i <= 5; i++) {
obj.setValue(i);
Thread.sleep(1000);
}
}
}
class ValuePropertyChangeListener implements PropertyChangeListener {
/* Cette fonction est appelée quand la valeur change */
@Override
public void propertyChange(PropertyChangeEvent evt) {
/* Récupère l'objet source */
POJO obj = (POJO) evt.getSource();
/* Récupère l'ancienne et la nouvelle valeur */
System.out.println("La valeur est passée de " + evt.getOldValue() + " à " + evt.getNewValue());
System.out.println(obj + "\n");
}
}
class POJO {
private int value;
/* Pour ajouter des observateurs de propriétés */
private final PropertyChangeSupport support = new PropertyChangeSupport(this);
public void setValue(int value) {
/* Récupère l'ancienne valeur */
int oldValue = this.value;
/* Change la valeur de l'objet courant */
this.value = value;
/* Prévient les observateurs que la valeur a changée */
support.firePropertyChange("value", oldValue, this.value);
}
/* Permet d'ajouter des observateurs */
public void addPropertyChangeListener(String propertyName, PropertyChangeListener listener) {
support.addPropertyChangeListener(propertyName, listener);
}
@Override
public String toString() {
return "POJO [value=" + value + "]";
}
}
Commentaires
Enregistrer un commentaire