Visitor: Nuevas Operaciones Sin Cambiar Clases
Añade nuevas operaciones a una jerarquía de objetos sin modificar las clases — el visitor porta la operación, los elementos simplemente la aceptan.
Por qué importa
Imagina un modelo de documento con Circle, Rectangle y Triangle. Necesitas añadir exportación JSON, exportación XML y renderizado SVG. Añadir cada operación como método en cada clase viola el Principio Abierto/Cerrado — estás modificando código estable. El patrón Visitor externaliza las operaciones: un JSONExportVisitor sabe cómo manejar cada forma; las formas solo necesitan llamar a accept(visitor). Añadir una nueva exportación es una nueva clase, no un cambio a las existentes.
Doble despacho disfrazado
Visitor es la solución clásica al problema de "doble despacho" — despachar basándose en los tipos de dos objetos (tipo visitor y tipo elemento). Cuando circle.accept(jsonVisitor) llama a jsonVisitor.visitCircle(this), el lenguaje resuelve tanto el tipo del elemento (Circle) como el del visitor (JSONExportVisitor). Los recorridos de AST de compiladores, evaluadores de expresiones y transformadores de documentos usan esta técnica extensivamente.
💡Conclusión clave
Visitor es la respuesta a "necesito añadir una nueva operación a una jerarquía de clases estable sin tocarla" — la operación viaja al dato, no al revés.
🔧 Algunos ejercicios pueden tener errores. Si algo parece incorrecto, usa el botón Feedback (abajo a la derecha) para reportarlo — nos ayuda a corregirlo rápido.
Pista: Visitor es la respuesta a 'necesito añadir una nueva operación a una jerarquía de clases estable sin tocarla' — la operación viaja al dato, no al revés.
✗ Tu versión