El patrón visitante es un patrón de diseño de comportamiento que te permite separar los algoritmos de los objetos en los que operan.

¿Qué problema resuelve el patrón visitante?

El patrón Visitante sugiere que coloques el nuevo comportamiento en una clase llamada visitante, en lugar de intentar integrarlo en las clases existentes. El objeto original que tenía que realizar el comportamiento ahora se pasa a uno de los métodos del visitante como argumento, proporcionando acceso al método a todos los datos necesarios contenidos en el objeto.

La clase visitante puede definir un conjunto de métodos, cada uno de los cuales podría tomar argumentos de diferentes tipos.

El patrón Visitante utiliza una técnica llamada Double Dispatch, que ayuda a ejecutar el método adecuado en un objeto sin condicionales engorrosos. Los objetos conocen sus propias clases, por tanto podrán elegir un método adecuado para el visitante con menos dificultad.

¿Cuándo usar el patrón visitante?

Podrías utilizar el patrón Visitante cuando necesites realizar una operación en todos los elementos de una estructura de objeto compleja, como podría ser un árbol de objetos. Este patrón te permite ejecutar una operación sobre un conjunto de objetos con diferentes clases haciendo que un objeto visitante implemente varias variantes de la misma operación.

También podrías utilizar este patrón para limpiar la lógica de negocio de los comportamientos auxiliares. Puedes hacer que las clases primarias de tu aplicación se centren más en sus trabajos principales.

Y por último, deberías usar el patrón cuando un comportamiento tenga sentido solo en algunas clases de una jerarquía de clases, pero no en otras. Puedes extraer este comportamiento en una clase de visitante separada e implementar sólo aquellos métodos de visita que acepten objetos de clases relevantes.

Pros y contras del patrón visitante

Los siguientes son algunos de los “pros y cons” de este patrón.

Pros

Contras

  • Principio abierto/cerrado. Puedes introducir un nuevo comportamiento que puede funcionar con objetos de diferentes clases sin cambiar estas clases. 

  • Principio de responsabilidad única. Puedes mover varias versiones del mismo comportamiento a la misma clase.

  • Un objeto visitante puede acumular información útil mientras trabaja con varios objetos. 

  • Debes actualizar todos los visitantes cada vez que se agrega o elimina una clase de la jerarquía de elementos. 

  • Los visitantes pueden carecer del acceso necesario a los que campos y métodos privados de los elementos con los que se supone que deben trabajar.

“Show me the code”

El patrón Visitante es un patrón bastante complejo y muy poco popular en PHP. Su uso es poco común debido a esa complejidad y a una aplicabilidad limitada.

Sin embargo, si quieres saber cómo se ve el código del patrón visitante, puedes ver el ejemplo del mundo real de refactoring.guru. En el ejemplo de mundo real podrás ver cómo el patrón ayuda a introducir una función de generación de informes en una jerarquía de clases existente.

Una vez que se agrega la infraestructura visitante a la aplicación, puedes agregar fácilmente otros comportamientos similares a la aplicación, sin cambiar las clases existentes.

¿Utilizas el patrón Visitante en tus proyectos? ¿Qué tal la experiencia? ¡Coméntalo abajo!

Fuente:

Compartir es construir