Template Method

1 Sinopsis

Se escribe una clase abstracta que contiene una parte de la logica necesitada para aplicar un algoritmo. Organiza la clase de tal manera que los metodos concretos llaman a los metodos abstractos. Provee la logica faltante, sobreescribiendo los metodos abstractos por metodos concretos.

2 Contexto

Se necesita codificar un algoritmo de busqueda lineal, que recorre un arreglo de objetos. El algoritmo consiste en: Recibir el objeto a buscar Recorrer el arreglo Comparar el objeto buscado con el actual Retornar el objeto si se encontro, de lo contrario nulo. El metodo comparar se declara abstracto y va ir variando dependiendo del objeto que se desea comparar.

3 Solucion

AbstractTemplate. Clase que contiene un metodo concreto con el algoritmo escrito. Dicho algoritmo invoca metodos abstractos ConcreteTemplate. Clase que extiende AbstractTemplate y codifica los metodos abstractos.

4 Consecuencias

Permite construir software complejo en segmentos.

5 Ejemplo

Se tiene una clase denominada Cantante, su funcion es cantar. Invoca un metodo denominado, ejecutarNota, el cual se declara abstracto.


public abstract class Cantante  {
    ....
}
See the complete code for Cantante here.

Este es el algoritmo

 public void cantar() {
    boolean salir=false;
    int contador = 0;
    while(!salir) {
      ejecutarNota();
      contador++;
      if (contador == 10) { break;}
    }
 }

Y el metodo ejecutarNota es abstracto

  public abstract void ejecutarNota();

Una clase que extiende a Cantante e implemente el metodo ejecutarNota es:


public class Tenor extends Cantante  {
    ....
}
See the complete code for Tenor here.
  public void ejecutarNota(){ System.out.println("DO");}

Y la clase cliente es:


public class ClientTemplate  {
    ....
}
See the complete code for ClientTemplate here.
   public static void main(String [] args) {
      Cantante luisMiBuey = new Tenor();
      luisMiBuey.cantar();
   }