Template Method

Template Method
Información sobre la plantilla
Templatemethod.jpg
Concepto:Este patrón define una estructura algorítmica en la súper clase y delega la implantación de los métodos a las subclases.

Template Method: es un patrón de diseño que define una estructura algorítmica en la súper clase, delegando la implementación a las subclases. Es decir, define una serie de pasos, en donde los pasos serán redefinidos en las subclases. Permite que las subclases redefinan ciertos pasos del algoritmo sin cambiar su estructura.

Clasificación del Patrón

Patrón de Comportamiento.


Intención

Proporcionar un método que permite que las subclases redefinan parte del método sin rescribirlo.


Motivación

Cuando se construyen jerarquías de clases complejas para una aplicación, a menudo se duplican distintas partes del código. Esa situación no es deseable, porque la intención es reutilizar todo el código que sea posible. La refactorización de código para que los métodos comunes estén en una superclase es un paso en la dirección correcta. El problema es que algunas veces una operación que ha sido refactorizada confía en la información específica que solamente esta disponible en una subclase. Debido a esto, los desarrolladores a menudo deciden no refactorizar y aceptar la presencia de código duplicado en distintas clases.


Participantes

  • AbstractTemplate: Implementa un método plantilla que define el esqueleto de un algoritmo y define métodos 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.


Usos

  • Este [patrón] se vuelve de especial utilidad cuando es necesario realizar un algoritmo que sea común para muchas clases, pero con pequeñas variaciones entre una y otras.
  • Para proporcionar un esqueleto para un método, permitiendo que las subclases redefinan partes especificas del método.
  • Para centralizar partes de un método que se definen en todos los subtipos de una clase, pero que siempre tiene una pequeña diferencia en cada subclase.
  • Otro uso particular se da en la creación de sistemas de plugins. Por definición este patrón garantiza la existencia de distintos métodos en una clase que pueden ser sobrescritos por un descendiente.

Ventajas e Inconvenientes

Ventajas

  • La principal ventaja es que facilita la reutilización de código, por eso es fundamental este patrón en muchos Frameworks.

Desventajas

  • Se puede producir ambigüedad si no se escribe bien
  • Si el método plantilla llama demasiados métodos abstractos, se cansará pronto de utilizar AbstractClass como superclase.


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.


Patrones relacionados

  • Factory Method: los métodos plantilla a menudo llaman a métodos de fabricación para crear nuevas instancias sin conocer la clase exacta que se está creando.
  • Strategy: el patrón Strategy utiliza la composición para remplazar completamente el comportamiento, mientras que el patrón Template Method utiliza la herencia para sustituir partes del comportamiento.
  • Intercepting Filter: este utiliza el patrón Template Method para implementar su estrategia de filtros de plantilla.


Fuentes