import java.util.ArrayList;

// décore un ICompteur pour ajouter une gestion d'écouteur
class CompteurObservateur implements ICompteur {
	private ICompteur décoré; // le compteur décoré
	CompteurObservateur(ICompteur décoré) {
		this.décoré = décoré;
	}
	
	public int getEtat() {
		this.décoré.getEtat(); // délègue à l'objet décoré
	}
	
	public void incrementer() {
		this.décoré.incrementer(); // délègue à l'objet décoré
		this.notifie();            // notifie les écouteurs
	}
	
// ---------- Gestion des écouteurs ---------- 
// Déclare une liste d'écouteurs
	private ArrayList<ICompteurListener> ecouteurs = new ArrayList<ICompteurListener>();

// Méthode pour notifier les écouteurs lorsque l'état est modifié
	void notifie() {
		for(ICompteurListener cl : this.ecouteurs) 
			cl.miseAJour();
	}
	
// Méthode pour permettre l'enregistrement de nouveaux écouteurs.
	void addActionListener(IActionListener nouveau) {
		this.ecouteurs.add(nouveau);
	}
}
