J’avais besoin, pour un projet en Java, de rajouter de nouvelles opérations à un groupe de classes fermées (du point de vue SOLID). J’ai opté pour une implémentation à base de visiteur. Comme on le voit sur le diagramme de classes ci-dessous, adapté du cas décrit dans le livre Design Patterns: Elements of Reusable Object-Oriented Software, visiteur introduit de nombreuses relations.

gof visitor 01

Je ne voulais pas que toutes les classes appartiennent au même package. Je voulais encore moins introduire du couplage entre des packages mal conçus. Je suis arrivé à cette solution :

gof visitor 02

Le visiteur n’est pas une panacée : il contraint les classes visitées à appartenir au même package que l’interface du visiteur, à cause du double dispatch. Les implémentations du visiteur, moins contraintes, peuvent être créées dans leur propre package.