Patron Visitor

Introduccion:

Representa una operacion sobre los elementos de una estructura de objetos. Permite definir una nueva operacion sin cambiar las clases de los elementos sobre los que opera.

Nombre del Patron:
Visitor (visitante).

Clasificacion del Patron:
Patron de Comportamiento.

Intencion:

Proporcionar una forma facil y sostenible de ejecutar acciones en una familia de clases. Este patron centraliza los comportamientos y permite que sean modificados o ampliados sin cambiar las clases sobre las que actuan.

Motivacion:

Un compilador representa los programas como árboles de sintaxis abstracta, sobre los que ejecuta operaciones.
Muchas operaciones necesitan diferenciar distintos tipos de nodo en el árbol (expresiones, variables, etc.).

Estructura:




Participantes:

Visitor: Define una operación de visita para cada clase de elemento concreto en la estructura de objetos.

ConcreteVisitor: Implementa la interfaz Visitor, Cada operación implementa un fragmento de la labor global del visitor concreto, pudiendo almacenar información local.

Element: Define una operación accept con un visitor como argumento.

ConcreteElement: Implementa la operación accept.

ObjectStructure: Gestiona la estructura de objetos, y puede enumerar sus elementos, Puede ser un compuesto (patrón composite) o una colección de objetos, Puede ofrecer una interfaz que permita al visitor visitar a sus elementos.

Consecuencias:

Facilita la definición de nuevas operaciones.

Agrupa operaciones relacionadas.

Añadir nuevas clases ConcreteElement es costoso.

Permite atravesar jerarquías de objetos que no están relacionados por un padre común.

El visitor puede acumular el estado de una operación al visitar la estructura de objetos, en vez de pasarlo como argumento o usar variables globales.

Rompe la encapsulación.

Patron Template Method

Introduccion:

Define una operacion, el esqueleto de un algoritmo, delegando en las subclases algunos de sus pasos. Permite que las subclases redefinan ciertos pasos del algoritmo sin cambiar su estructura.

Nombre del Patron:
Template Method (Metodo Plantilla).

Clasificacion del Patron:
Patron de Comportamiento.

Intencion:

Proporcionar un metodo que permite que las subclases redefinan parte del metodo sin rescribirlo.

Motivacion:

Cuando se construyen jerarquias de clases complejas para una aplicacion, a menudo se duplican distintas partes de codigo. esa situacion no es deseable, porque la intencion es reutilizar tanto codigo como sea posible. La refactorizacion de codigo para que los metodos comunes esten en una superclase es un paso en la direccion correcta. El problema es que algunas veces una operacion que ha sido refactorizada confia en la informacion especifica que solamente esta disponible en una subclase. Debido a esto, los desarrolladores a menudo deciden no refactorizar y aceptar la presencia de codigo duplicado en distintas clases.

Estructura:



Prticipantes:

AbstractTemplate: Implementa un metodo plantilla que define el esqueleto de un algoritmo y define metodos abstractos que implementan las subclases concretas.

ConcreteTemplate: Implementa los métodos abstractos para realizar los pasos del algoritmo que son específicos de la subclase.

Colaboraciones:

Las clases concretas confían en que la clase abstracta implemente la parte fija del algoritmo.

Consecuencias:

Favorece la reutilización del código. Muy útiles para construir bibliotecas, pues ayuda a factorizar el comportamiento común de las clases.

Lleva a una estructura de control invertido (Principio de Hollywood): la superclase base invoca los métodos de las subclases.

Hora Bogotá Colombia