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.
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.
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.
Permite construir software complejo en segmentos.
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(); }