2010-05-18 3 views

Répondre

5

Le but du modèle de visiteur est de permettre l'ajout de nouvelles opérations à une hiérarchie de classes sans modification de cette hiérarchie. Je n'ai jamais vu quelqu'un suggérer que seules les opérations en lecture seule sont acceptables. La seule limitation est que les opérations ajoutées ne doivent utiliser que l'interface publique de la hiérarchie de classe.

2

Je ne pense pas que vous puissiez faire une déclaration générale, qu'il soit bon ou mauvais de modifier l'état de n'importe quoi. Je pense que c'est correct de modifier les états tant que cela n'affecte pas la logique de visite elle-même. Par exemple, vous pouvez écrire un visiteur qui visite tous les fichiers sous la structure de dossiers et renomme le nom de fichier en majuscules.

+0

Il y a certainement des cas où l'on peut faire e l'affirmation que changer d'état est une bonne ou une mauvaise chose. Le modèle de visiteur devrait être utilisé de telle manière qu'un changement d'état est possible et même probable. Alors qu'avec le modèle d'observateur, l'observateur ne devrait pas changer d'état. –

+0

qu'en est-il un utilisateur, un événement pour commenter, un auditeur punisher qui interdirait l'utilisateur après avoir dit quelques mots violents? :-) –

1

L'exemple Microsoft d'un visiteur modifiant le récepteur est le ExpressionVisitor. Le but de la classe ExpressionVisitor est de modifier un arbre d'expression. Donc je suppose que Microsoft pense au moins que c'est acceptable.

+1

Microsoft n'est pas toujours le meilleur guide quant à ce qui est bien et mal: http://ayende.com/blog/35841/review-microsoft-n-layer-app-sample-part-xndash-architecture- for-the-space-age – jason

+0

L'interprétation standard quand quelqu'un dit "l'autorité X pense que Y est acceptable" est que vous endossez Y en faisant appel à l'autorité X. cf. * argumentum ad verecundiam *. – jason

+2

@Jason Bien sûr, je considérerai Microsoft comme une autorité. Je dis qu'il y a un exemple où cette autorité trouve ce modèle acceptable. Mais je dis qu'ils sont le "meilleur guide"? Non . Je laisse au demandeur le soin de décider s'il a raison. –

0

Chaque motif possède ses propres avantages, inconvénients et cas d'utilisation.

Vous pouvez utiliser motif Command à

  1. Découpler le invoker & récepteur de commande

  2. Mettre en oeuvre rappel mécanisme

  3. Mettre en oeuvre annuler et rétablir la fonctionnalité

  4. Maintenir une histoire des commandes

Utiliser modèle Visitor dans les scénarios ci-dessous:

  1. Des opérations similaires doivent être effectuées sur des objets de différents types regroupés dans une structure
  2. Vous devez exécuter de nombreuses opérations distinctes et sans rapport. Il sépare Opération des objets Structure
  3. nouvelles opérations doivent être ajoutés sans changement dans la structure de l'objet

Related posts:

Using Command Design pattern

When should I use the Visitor Design Pattern?

Questions connexes