Está en la página 1de 5

Patrn de diseo

Nombre: Mtodo Plantilla (Template Method )


Tipo: Comportamiento
Nivel: Objeto
Propsito: Proporcionar un mtodo que permite que las subclases redefinan partes de
un mtodo sin reescribirlo.
Descripcin:
Cuando se construye jerarquas de clase complejas para una aplicacin a menudo se
duplican distintas partes del cdigo. Esa situacin no es deseable, porque la intencin es
reutilizar tanto cdigo como sea posible. La refactorizacin del cdigo para que los
mtodos comunes estn en una superclase es un paso en la direccin correcta. El
problema es que algunas veces una operacin que ha sido refactorizada confa en la
informacin especfica que solamente est disponible en una subclase.
Aplicabilidad:
Utilice el patrn Mtodo Plantilla para:

Proporciona un esqueleto para un mtodo, permitiendo que las subclases redefinan partes
especficas del mtodo.

Centralizar partes de un mtodo que se definen en todos los subtipos de una clase, pero que
siempre tienen una pequea diferencia en cada subclase.

Controlar las operaciones que es necesario redefinir las subclases.

Implementacin:
La implementacin del patrn Mtodo plantilla necesita:

AbstractClass (Clase abstracta) es una clase abstracta que contiene el mtodo de plantilla y define
uno o ms mtodos abstractos. El mtodo plantilla contiene el esqueleto del cdigo y llama a uno o
ms de los mtodos abstractos. Para evitar que las subclases redefinan el mtodo plantilla deberan
ser declarado como final.

ConcreteClass (Clase concreta) es una subclase de AbstractClass e implementa los mtodos


abstractos definidos. Confia en AbstractClass para proporcionar una estructura de la operacin que
contiene el mtodo plantilla.

Diagrama de clases dinmico

Ventajas e inconvenientes:
La ventaja principal del patrn Mtodo Plantilla es que facilita la reutilizacin de cdigo. Sin el mtodo
plantilla, el cdigo se duplica en muchas subclases.
Esta ventaja hace que el patrn Mtodo Plantilla sea fundamental en muchos frameworks. Un framework
contiene muchos mtodos que solo confan mnimamente en las implementaciones especificas de las
subclases. El uso del patrn Mtodo Plantilla implica que la estructura completa puede ser proporcionada

por el framework. Si utiliza este framework, solo tendr que redefinir unos pocos mtodos para poder
utilizarlo.
Si el mtodo plantilla llama a demasiados mtodos abstractos, se cansara pronto de utilizar AbstractClass
como superclase. Es mejor hacer que le mtodo plantilla llame a un nmero limitado de mtodos
abstractos.

Patrones relacionados:
Entre los patrones relacionados se incluyen:

Factory Method (Metodo de fabricacin) los mtodos plantilla a menudo llaman a mtodos de
fabricacin para crear nuevas instancias sin conocer la clase exacta que se est creando..

Strategy (Estrategia) El patrn strategy utiliza la composicin para remplazar completamente el


comportamiento, mientras que el patrn mtodo plantilla utiliza la herencia para sustituir partes del
comportamiento.

Intercepting Filter (Filtros de intercepcin) [CJ2EEP] el patrn Intercepting Filter utiliza el patrn
Template Method para implementar su estrategia de filtros de pantalla.

Caso de estudio:
Imaginemos que tenemos que desarrollar un pequeo programa que nos de una
valoracin de los jugadores de un equipo de ftbol en funcin de ciertos parmetros.
Supongamos que el equipo est compuesto por porteros y delanteros (los defensas y
centrocampistas nos los saltaremos). El programa deber comportarse de la siguiente
manera:

Para cada jugador devolver una valoracin: malsimo, malo, normal, bueno o
galctico.

Todo jugador que haya disputado menos del 20% de los minutos que disput su
equipo ser considerado malsimo.

Los jugadores suman puntos positivos si alcanzan unos objetivos.

El objetivo de los delanteros es marcar goles, sumarn 30 puntos por cada gol por
partido que promedien. Ejemplo: si un jugador marca de media 0,8 goles por
partido sumar 24 puntos.

El objetivo de los porteros es no recibir goles, perdern 30 puntos por cada gol por
partido que promedien, pero partirn con 50 puntos. Ejemplo si un portero encaja
1,1 gol por partido sumar 17 puntos (50 30*1,1), si recibiese 0,5 goles por
partido sumara 35 puntos (50 30*0,5).

A los jugadores que ms cobren se les exigir ms, por lo que los jugadores
perdern puntos en funcin de su salario. Imaginemos que el salario de los
jugadores oscila del 1 al 15.

Los delanteros perdern el 10% de su salario en puntos. Ejemplo: si un delantero


cobra 12 perder 1,2 puntos.

Los porteros perdern el 8% de su salario en puntos. Ejemplo: si un portero cobra


12 perder 0,96 puntos.

Los jugadores que obtengan menos de 0 puntos sern considerados malsimos.

Los jugadores que obtengan entre 0 y 10 puntos sern considerados malos.

Los jugadores que obtengan entre 10 y 20 puntos sern considerados normales.

Los jugadores que obtengan entre 20 y 40 puntos sern considerados buenos

Los jugadores que obtengan ms de 40 puntos sern considerados galcticos.