En mi aplicación CAD/CAM tengo Paths and Collections of Paths (PathList). A veces tengo que generar una colección de formas.No solo tengo que generar esta colección particular de formas, debo incluirla con otra colección de formas. A menudo necesito una docena o más de parámetros para transmitir toda la información necesaria para hacer los cálculos.
Todos los cálculos de forma (simples o complejos) en mi CAM se canalizan a PathList que se envía a las diferentes máquinas.
Con este diseño, sería mejor tener alguna configuración que implique agregar el resultado a una sola colección.
The Path Visitor se adapta muy bien. Cada cálculo de forma se encapsula en su propia clase con las propiedades tan complejas como sea necesario.
Así que el visitante puede Campana Cocina tenido 8 formas para la pathlist
Mientras que la preparación en la cocina de Visitantes añade 6 formas.
The drawer Visitor agrega algunos más.
Luego paso el PathList resultante al resto del sistema como cualquier otro generador de formas.
Fácilmente tengo opciones agregando otro visitante o no ejecutando algunos. Para un chico que solo quiere un mostrador y cajones, solo necesito correr dos visitas.
El código resultante es muy legible, lo cual es importante cuando vuelvo a visitar esta área 3, 5 o 10 años más adelante. Además, debido a los cambios de encapsulamiento en un visitante, tiene un impacto mínimo o nulo en otros visitantes.
Además, ahora tengo un patrón de diseño estandarizado para agregar cualquier funcionalidad nueva a PathList implementando el patrón de visitante.
Por ejemplo, solía ser que nuestro editor de propiedades solo funcionaba en una sola ruta. Cuando cambiamos a la edición de varias rutas, fue fácil implementar visitas personalizadas para realizar cambios globales en todas las rutas. Era más legible que usar bucles dentro de los delegados.
Pero en última instancia todo se reduce a juicio y preferencia.
Véase también http://stackoverflow.com/questions/255214/when-should-i-use-the-visitor-design-pattern –