L'observateur est simplement chargé de la gestion des écouteurs (en gras), il enregistre et notifie.
Il délègue la gestion de l'état à l'objet décoré (en rouge)
class CompteurObservateur implements ICompteur {
private ICompteur décoré;
public CompteurObservateur(ICompteur décoré) {
this.décoré = décoré;
}
public int getEtat() {
return this.décoré.getEtat();
}
public void incrementer() {
this.décoré.incrementer();
this.notifie();
}
void notifie() {
if (this.ecouteur != null)
this.ecouteur.miseAJour();
}
private ICompteurListener ecouteur;
void addCompteurListener(ICompteurListener nouveau) {
this.ecouteur = nouveau;
}
}
On peut décorer tout ICompteur : un compteur sans notification, un
compteur modulo, un compteur rapide, etc.