El patrón Template Method define una estructura algorítmica en una superclase que delega la implementación a las subclases. Esto permite que las subclases redefinan partes de un método sin reescribirlo por completo. Se usa cuando se necesita un algoritmo común con pequeñas variaciones entre clases, y para centralizar partes de un método que son similares pero con pequeñas diferencias en cada subclase.
2. Un 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. WIKIPEDIA PATRONES TEMPLATE METHOD
3. Propósito Proporcionar un método que permite que las sublclases redefinan partes del método sin rescribirlo TEMPLATE METHOD PATRONES
11. Cont… La idea es usar un método plantilla que tenga los pasos del proceso, sin tener en cuenta la implementación real en las subclases. Pueden existir varios tipos de prestamos, Veamos como seria la implementación de este ejemplo usando Java TEMPLATE METHOD PATRONES
12. abstract class Verificaciones { public abstract void revisBanco(); public abstract void revisCredito(); public abstract void revisPrestamos(); public abstract void revisStock(); public abstract void revisIngresos(); public void verificar() { revisBanco(); revisCredito(); revisPrestamos(); revisStock(); revisIngresos(); } } Métodos Primitivos Método Template TEMPLATE METHOD PATRONES
13. class AppPrestamo extends Verificaciones { public void revisBanco() { System.out.println(" verificar banco ... "); } public void revisCredito() { System.out.println(" verificar credito ... "); } public void revisPrestamos() { System.out.println(" verificar otros prestamos... "); } public void revisStock() { System.out.println(" verificar stock... "); } public void revisIngresos() { System.out.println(" verificar ingreso familiar... "); } La clase AppPrestamo hereda de Verificaciones ,para poder reescribir cada método primitivo TEMPLATE METHOD PATRONES
14. private String nombre; public AppPrestamo( String nombre) { this .nombre = nombre; } public String getNombre() { return nombre; } Además posee estos métodos para determinar el nombre del cliente PATRONES TEMPLATE METHOD
15. Para finalizar una clase TestTemplate , que es donde se encuentra el main class TestTemplate { public static void main( String [] args) { AppPrestamo hipotecCliente = new AppPrestamo(" Gokú "); System.out.println(" cliente "+ hipotecCliente.getNombre()+ " Aplicacion para préstamo Hipotecario. "); hipotecCliente.verificar(); AppPrestamo prestAccionesCliente = new AppPrestamo(" Vegeta "); System.out.println(" cliente "+ prestAccionesCliente.getNombre()+ " Aplicacion para prestamo de acciones. "); prestAccionesCliente.verificar(); } } PATRONES TEMPLATE METHOD
16. El resultado de este ejemplo sería el siguiente: PATRONES TEMPLATE METHOD
17.
18. De acuerdo a lo anterior, podemos establecer lo siguiente, una clase abstracta Automovil que contenga un método Template que utilice las tres operaciones básicas. abstract class Automovil{ public abstract void CambioMarcha(); public abstract void Acelerar(); public abstract void Frenar(); public void Andar(){ Acelerar(); CambioMarcha(); Frenar(); } } Métodos Primitivos Método Template PATRONES TEMPLATE METHOD
19. Ahora podemos definir unas Subclases de tipo Automóvil Manual y Automóvil Automatico class AutomovilManual extends Automovil{ public void CambioMarcha(){ System.out.println(" Cambio la Marcha como un auto manual "); } public void Acelerar(){ System.out.println(" Acelerando como un auto manual "); } public void Frenar(){ System.out.println(" Freno como un auto manual... "); } } PATRONES TEMPLATE METHOD
20. Y de tipo Automóvil Automático class AutomovilAutomatico extends Automovil{ public void CambioMarcha(){ System.out.println(" Cambio la Marcha como un auto automat "); } public void Acelerar(){ System.out.println(" Acelerando como un auto automatico "); } public void Frenar(){ System.out.println(" Freno como un auto automatico... "); } } PATRONES TEMPLATE METHOD
21. Para finalizar una clase TestAuto , que es donde se encuentra el main class TestAuto{ public static void main( String [] args) { AutomovilAutomatico automatico = new AutomovilAutomatico(); System.out.println(" Prendiendo automovil automatico "); automatico.Andar(); AutomovilManual manual = new AutomovilManual(); System.out.println(" Prendiendo automovil manual "); manual.Andar(); } } PATRONES TEMPLATE METHOD
22. El resultado de este ejemplo sería el siguiente: PATRONES TEMPLATE METHOD