Patron Template

9,507 views

Published on

Patron de Diseño Template, Ingenieria de Software

3 Comments
3 Likes
Statistics
Notes
No Downloads
Views
Total views
9,507
On SlideShare
0
From Embeds
0
Number of Embeds
85
Actions
Shares
0
Downloads
343
Comments
3
Likes
3
Embeds 0
No embeds

No notes for slide

Patron Template

  1. 1. PATRONES Template Method ( Método Plantilla)
  2. 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. 3. Propósito Proporcionar un método que permite que las sublclases redefinan partes del método sin rescribirlo TEMPLATE METHOD PATRONES
  4. 4. <ul><li>Donde Usar </li></ul><ul><li>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. </li></ul><ul><li>Para proporcionar un esqueleto para un método, permitiendo que las subclases redefinan partes especificas del método </li></ul><ul><li>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 </li></ul>TEMPLATE METHOD PATRONES
  5. 5. UML TEMPLATE METHOD PATRONES
  6. 6. <ul><li>Participantes </li></ul><ul><li>AbstractClass (DataObject) </li></ul><ul><ul><li>Define las operaciones primitivas abstractas que las subclases concretas, definen para implementar los pasos de un algoritmo </li></ul></ul><ul><ul><li>Implementa un método template definiendo el esqueleto de un algoritmo </li></ul></ul><ul><li>ConcreteClass (CustomerDataObject) </li></ul><ul><ul><li>Implementa las operaciones primitivas </li></ul></ul>TEMPLATE METHOD PATRONES
  7. 7. <ul><li>Ventajas y usos </li></ul><ul><li>La principal ventaja es que facilita la reutilización de código, por eso es fundamental este patrón en muchos Frameworks </li></ul><ul><li>Otro uso particular se da en la creación de sistemas de plugins. Por definición este patrón garantiza la existencia de distintos metodos en una clase que pueden ser &quot;sobreescritos&quot; por un descendiente. </li></ul>TEMPLATE METHOD PATRONES
  8. 8. <ul><li>Desventajas. </li></ul><ul><li>Se puede producir ambigüedad si no se escribe bien </li></ul><ul><li>Si el método plantilla llama demasiados métodos abstractos, se cansará pronto de utilizar AbstractClass como superclase. </li></ul>TEMPLATE METHOD PATRONES
  9. 9. <ul><li>Patrones relacionados </li></ul><ul><li>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 </li></ul><ul><li>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 </li></ul><ul><li>Intercepting Filter : este utiliza el patrón Template Method para implementar su estrategia de filtros de plantilla </li></ul>TEMPLATE METHOD PATRONES
  10. 10. <ul><li>Ejemplo 1 </li></ul><ul><li>Una operación de préstamo puede requerir varios pasos para finalizarse, asumamos que son los siguientes pasos </li></ul><ul><li>Verificar el balance bancario del cliente </li></ul><ul><li>Comprobar la puntuación de crédito del cliente en tres compañías diferentes </li></ul><ul><li>Verificar información sobre otros prestamos del cliente </li></ul><ul><li>verificar el valor del stock de acciones del cliente. </li></ul><ul><li>Revisar las futuras ingresos potenciales del cliente en el futuro </li></ul>TEMPLATE METHOD PATRONES
  11. 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. 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. 13. class AppPrestamo extends Verificaciones { public void revisBanco() { System.out.println(&quot; verificar banco ... &quot;); } public void revisCredito() { System.out.println(&quot; verificar credito ... &quot;); } public void revisPrestamos() { System.out.println(&quot; verificar otros prestamos... &quot;); } public void revisStock() { System.out.println(&quot; verificar stock... &quot;); } public void revisIngresos() { System.out.println(&quot; verificar ingreso familiar... &quot;); } La clase AppPrestamo hereda de Verificaciones ,para poder reescribir cada método primitivo TEMPLATE METHOD PATRONES
  14. 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. 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(&quot; Gokú &quot;); System.out.println(&quot; cliente &quot;+ hipotecCliente.getNombre()+ &quot; Aplicacion para préstamo Hipotecario. &quot;); hipotecCliente.verificar(); AppPrestamo prestAccionesCliente = new AppPrestamo(&quot; Vegeta &quot;); System.out.println(&quot; cliente &quot;+ prestAccionesCliente.getNombre()+ &quot; Aplicacion para prestamo de acciones. &quot;); prestAccionesCliente.verificar(); } } PATRONES TEMPLATE METHOD
  16. 16. El resultado de este ejemplo sería el siguiente: PATRONES TEMPLATE METHOD
  17. 17. <ul><li>Ejemplo 2 </li></ul><ul><li>El movimiento de un automóvil puede resumirse en tres pasos </li></ul><ul><li>Acelerar </li></ul><ul><li>Cambiar Marcha </li></ul><ul><li>Frenar </li></ul><ul><li>Pero la forma en que se cambia la marcha puede variar de acuerdo al tipo de auto, pues puede ser automática o manual. </li></ul>PATRONES TEMPLATE METHOD
  18. 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. 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(&quot; Cambio la Marcha como un auto manual &quot;); } public void Acelerar(){ System.out.println(&quot; Acelerando como un auto manual &quot;); } public void Frenar(){ System.out.println(&quot; Freno como un auto manual... &quot;); } } PATRONES TEMPLATE METHOD
  20. 20. Y de tipo Automóvil Automático class AutomovilAutomatico extends Automovil{ public void CambioMarcha(){ System.out.println(&quot; Cambio la Marcha como un auto automat &quot;); } public void Acelerar(){ System.out.println(&quot; Acelerando como un auto automatico &quot;); } public void Frenar(){ System.out.println(&quot; Freno como un auto automatico... &quot;); } } PATRONES TEMPLATE METHOD
  21. 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(&quot; Prendiendo automovil automatico &quot;); automatico.Andar(); AutomovilManual manual = new AutomovilManual(); System.out.println(&quot; Prendiendo automovil manual &quot;); manual.Andar(); } } PATRONES TEMPLATE METHOD
  22. 22. El resultado de este ejemplo sería el siguiente: PATRONES TEMPLATE METHOD
  23. 23. PATRONES TEMPLATE METHOD
  24. 24. PATRONES TEMPLATE METHOD

×