
 
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