Le pattern décorateur consiste à faire passer un objet (le
décorateur)
pour un autre objet (le décoré).
Pour cela, les deux objets doivent avoir exactement la même interface (ici
ICompteur). De plus, le décorateur ajoute
un comportement (ici, la gestion des écouteurs) et délègue le reste
du travail à l'objet décoré. Globalement le décorateur aura le même
comportement que l'objet décoré, puisqu'il délègue, mais il y ajoute
quelque chose.
C'est exactement ce qui se passe avec le CompteurRapide
qui se fait passé pour un compteur, il gère la vitesse d'incrémentation et délègue
la gestion de l'état à un compteur normal.
C'est aussi ce qui se passe avec le CompteurControle
qui se fait passé pour un compteur, il gère la ou les vues, il s'intègre à l'environnement
Swing en héritant de la classe Component, il délègue la gestion
de l'état à un compteur normal.
Sur le même modèle, nous allons construire une classe CompteurObservateur
qui se fait passé pour un compteur, ajoute la gestion d'écouteurs et délègue la gestion
de l'état à un compteur normal.