Modèle de visiteur Java au lieu d’instanceof switch

Dans cette question, il est dit que je peux utiliser un modèle de visiteur au lieu de plusieurs instanceof d’ instanceof . Jmg a déclaré: “Si vous n’êtes pas libre de changer A, B et C, vous pouvez appliquer le modèle de visiteur pour obtenir le même résultat.”

Pour autant que je sache, il me rest à faire en sorte que les visiteurs A, B et C prennent en charge le support (par exemple, une méthode accept() ).

Mon problème est que je n’ai absolument aucune possibilité de changer A, B et C. Je récupère simplement l’object Car de la bibliothèque étrangère et je dois appeler la méthode wash() spécifique aux camions, aux voitures de course et aux bus.

Je pense que j’ai toujours besoin d’une construction if-else-if avec instanceof art. Ai-je raison?

Oui, pour implémenter le modèle de visiteur, vous devez maintenant avoir access aux sources de A, B et C, sauf si toutes les classes ont la même signature (la méthode wash () porte donc le même nom). Si tel est le cas, vous pouvez utiliser le polymorphism pour appeler la bonne méthode.

Sinon, il est possible d’append des fonctionnalités aux classes auxquelles vous n’avez pas access au niveau du code source. Dans l’article de Wikipedia sur le modèle de visiteur (http://en.wikipedia.org/wiki/Visitor_pattern), il y a une petite note de bas de page sous l’exemple de Java:

Remarque: Une approche plus souple de ce modèle consiste à créer une classe wrapper implémentant l’interface définissant la méthode accept. Le wrapper contient une référence pointant sur le CarElement qui pourrait être initialisée par le constructeur. Cette approche évite de devoir implémenter une interface sur chaque élément. [voir l’article article Java Tip 98 ci-dessous]

Il fait référence à cet article: http://www.javaworld.com/javaworld/javatips/jw-javatip98.html

Donc dans l’ensemble, c’est possible, mais cela donne un nombre énorme de classes pour la petite tâche que vous voulez faire. Je m’en tiendrais à l’instance si j’étais toi.