2010-05-18 21 views

Respuesta

5

El propósito del patrón de visitante es permitir que se agreguen nuevas operaciones a una jerarquía de clases sin modificación a esa jerarquía. Nunca he visto a nadie sugiriendo que solo las operaciones de solo lectura sean aceptables. La única limitación es que las operaciones agregadas solo deben usar la interfaz pública de la jerarquía de clases.

2

No creo que pueda hacer una declaración general sobre si es bueno o malo modificar el estado de cualquier cosa. Creo que está bien modificar los estados siempre que no afecte a la lógica de visita en sí. Por ejemplo, puede escribir un visitante que visite todos los archivos en la estructura de carpetas y cambie el nombre del archivo a mayúsculas.

+0

Hay Definitivamente los casos en que uno puede hacer La afirmación de que cambiar el estado es algo bueno o malo. Se espera que el patrón de visitante se use de tal forma que un cambio de estado sea posible e incluso probable. Mientras que con el patrón del observador, el observador no debería estar cambiando el estado. –

+0

¿qué tal un usuario, evento para comentar, oyente castigador que prohibiría al usuario después de decir algunas palabras violentas? :-) –

1

El ejemplo de Microsoft de un visitante que modifica el receptor es el ExpressionVisitor. El objetivo de la clase ExpressionVisitor es modificar un árbol de Expresión. Así que supongo que Microsoft al menos piensa que es aceptable.

+1

Microsoft no siempre es la mejor guía sobre lo que está bien y lo que está mal: http://ayende.com/blog/35841/review-microsoft-n-layer-app-sample-part-xndash-architecture- para la era espacial – jason

+0

La interpretación estándar cuando alguien dice "la autoridad X piensa que Y es aceptable" es que usted está apoyando a Y apelando a la autoridad X. cf. * argumentum ad verecundiam *. – jason

+2

@Jason Seguro que consideraré a Microsoft como una autoridad. Estoy diciendo que aquí hay una instancia en la que esta autoridad considera que este patrón es aceptable. ¿Pero estoy diciendo que son la "mejor guía"? No . Dejo en manos del preguntador decidir si tienen razón. –

0

Cada patrón tiene sus propios pros, contras y casos de uso.

Puede utilizar Command patrón para

  1. Disociar el invocador & receptor de mando

  2. Implementar devolución de llamada mecanismo

  3. Implementar deshacer y rehacer funcionalidad

  4. mantener un historial de comandos

Uso Visitor patrón en escenarios siguientes:

  1. operaciones similares tienen que ser realizadas en objetos de diferentes tipos agrupados en una estructura
  2. Necesita ejecutar muchas operaciones distintas y no relacionadas. Se separa operación de objetos Estructura
  3. nuevas operaciones se tienen que añadir sin cambio en la estructura del objeto

mensajes relacionados:

Using Command Design pattern

When should I use the Visitor Design Pattern?

Cuestiones relacionadas