martes, 12 de febrero de 2013

Template Method

  • Clasificación del patrón: de comportamiento.
  • Intención: definir el esqueleto de un algoritmo dentro de una operación, dejando que las subclases redefinan ciertos pasos del algoritmo, pero sin cambiar su estructura.
  • También conocido como: ---
  • Aplicabilidad: Se utiliza este patrón cuando se necesita
    • aplicar las partes invariables de un algoritmo una vez y dejar en manos de las subclases la implementación del comportamiento que puede variar.
    • evitar la replicación de código mediante generalización: se factoriza el comportamiento común de varias subclases en una única superclase.
    • controlar las extensiones de las subclases. El Método Plantilla utiliza métodos especiales (métodos de enganche o hooks) en ciertos puntos, siendo los únicos puntos que pueden ser redefinidos y, por tanto, los únicos puntos donde es posible la extensión.
  • Estructura:
  • Participantes
    • AbstractClass: 
      • define operaciones primitivas abstractas que luego las subclases concretas deberán definir para implementar los pasos de un algoritmo.
      • implementa un método plantilla que define el esqueleto de un algoritmo y que llama operaciones primitivas así como operaciones definidas en AbstractClass o en otros objetos.
    • ConcreteClass: implementa las operaciones primitivas para llevar a cabo pasos específicos del algoritmo.
  • Colaboraciones
    • ConcreteClass se basa en AbstractClass para implementar los pasos invariables del algoritmo.
  • Implementación
    • Es recomendable declarar las operaciones primitivas de tal forma que sólo puedan ser llamadas por el método plantilla (protected, por ejemplo).
    • Debe reducirse en la medida de lo posible el número de operaciones primitivas que van a ser invocadas desde el método plantilla. De este forma se reducirá la complejidad de las subclases y resultará menos tediosa su implementación.
    • Convenciones de nombres: puede identificar las operaciones a sobreescribir mediante la adición de un prefijo a sus nombres.
  • Consecuencias
    • La utilización de este patrón es fundamental a la hora de reutilizar código.
    • Se invierte el control: en este caso la superclase es la encargada de llamar a las operaciones definidas en las subclases.
    • Template method puede llamar a:
      • Operaciones concretas: de la clase concreta o de un cliente.
      • Operciones primitivas: implementadas en la superclase.
      • Operaciones hooks: proporcionan código por defecto que puede ser refinado en las subclases si es necesario. A veces, por defecto, no hacen nada.
      • factory methods.
    • Muy útil en: 
      • implementación de bibliotecas de clases, ya que permiten extraer el comportamiento común de las clases de la biblioteca. 
      • sistemas de plugins, gracias principalmente a la utilización de las operaciones hooks.
  • Motivación: existen casos en que se necesita que varias subclases tengan un comportamiento similar, pero con algunas modificaciones en algunos de sus casos. Mediante la definición de algunos de los pasos de un algoritmo utilizando operaciones abstractas, el método de la plantilla fija su orden, y  permite que las subclases varíen los pasos que se adaptan a sus necesidades.
  • Ejemplo: 
  • Patrones relacionados
    • Factory Method: son llamados a menudo por un TemplateMethod.
    • Strategy: utilizan la delegación para variar el algoritmo entero, no solo una parte como lo hace el TemplateMethod.

No hay comentarios:

Publicar un comentario en la entrada