Objetivo:
“Construye una operación que debe realizarse sobre los
elementos de un conjunto de objetos. Esto permite agregar nuevas operaciones
sin modificar las clases de estos objetos. ”
¿Cuándo utilizar visitor?
Las situaciones óptimas en los que se debe utilizar este
patrón serán:
- Una estructura de objetos contiene muchas clases de objetos con distintas interfaces y se desea llevar a cabo operaciones sobre estos objetos que son distintas en cada clase concreta.
- Se quieren llevar a cabo muchas operaciones dispares sobre objetos de una estructura de objetos sin tener que incluir dichas operaciones en las clases.
- Las clases que definen la estructura de objetos no cambian, pero las operaciones que se llevan a cabo sobre ellas sí.
Diagrama
de Clases Genérico
Ejemplo
Descargar proyecto Aquí
En la tienda X todos los
productos pagan IVA. Algunos productos poseen un descuento. Utilizaremos el
Visitor para solucionar este problema
Diagrama
UML del Elemento
Comenzaremos codificando la
clase abstracta Visitable, que en nuestro ejemplo estará representada por el Producto.
Seguidamente codificamos lo
tipos de productos por medio de las clases ProductoDescuento y ProductoNormal
que harán las veces de ElementoConcreto1 y ElementoConcreto2
Diagrama UML del Visitante
Continuamos codificando la
Interfaz que estaría representada por la clase Visitante, La interfaz IVisitante incluye la firma de los dos
métodos, uno por cada clase que tenga que ser visitada, es decir se le pasa por
parámetro el ElementoConcreto correspondiente.
Ahora codificamos el visitante
concreto que en este caso será IVA.
Diagrama UML Completo
Finalmente instanciamos los objetos necesarios para la implementación del Patrón Visitor.
Ventajas
- Permite agregar numerosas funcionalidades a un conjunto de clases sin volverlas pesadas.
- Permite agregarles funcionalidades a un conjunto de clases sin modificar su interfaz.
Desventaja
Si la estructura del
conjunto de clases a las que es necesario agregar funcionalidades cambia a
menudo, el patrón Visitor no se adapta bien, puesto que cualquier modificación
de la estructura implica una modificación de cada visitante
bueniismo
ResponderEliminarEl mejor ejemplo que he podido apreciar, muy explicito y conciso.
ResponderEliminar