Patron Template

24
PATRONES Template Method ( Método Plantilla)

description

Patron de Diseño Template, Ingenieria de Software

Transcript of Patron Template

Page 1: Patron Template

PATRONESTemplate Method ( Método Plantilla)

Page 2: Patron Template

PATRONES

TEMPLATE METHOD

Un Template MethodTemplate 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

Page 3: Patron Template

TEMPLATE METHOD

PATRONES

Propósito

Proporcionar un método que permite que las sublclases redefinan partes del método sin rescribirlo

Page 4: Patron Template

TEMPLATE METHOD

PATRONES

Donde Usar

• 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.

• Para proporcionar un esqueleto para un método, permitiendo que las subclases redefinan partes especificas del método

• 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

Page 5: Patron Template

TEMPLATE METHOD

PATRONES

UML AbstractClass

+TemplateMethod()+PrimitiveOperation1()+PrimitiveOperation2()

ConcreteClass

+PrimitiveOperation1()+PrimitiveOperation2()

... PrimitiveOperation1()...PrimitiveOperation2()...

Page 6: Patron Template

TEMPLATE METHOD

PATRONES

Participantes

AbstractClass (DataObject)

• Define las operaciones primitivas abstractas que las subclases concretas, definen para implementar los pasos de un algoritmo

• Implementa un método template definiendo el esqueleto de un algoritmo

ConcreteClass (CustomerDataObject)

• Implementa las operaciones primitivas

Page 7: Patron Template

TEMPLATE METHOD

PATRONES

Ventajas y usos

• La principal ventaja es que facilita la reutilización de código, por eso es fundamental este patrón en muchos Frameworks

• 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 "sobreescritos" por un descendiente.

Page 8: Patron Template

TEMPLATE METHOD

PATRONES

Desventajas.

• Se puede producir ambigüedad si no se escribe bien

• Si el método plantilla llama demasiados métodos abstractos, se cansará pronto de utilizar AbstractClass como superclase.

Page 9: Patron Template

TEMPLATE METHOD

PATRONES

Patrones relacionados

• 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

• 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

• Intercepting Filter : este utiliza el patrón Template Method para implementar su estrategia de filtros de plantilla

Page 10: Patron Template

TEMPLATE METHOD

PATRONES

Ejemplo 1

Una operación de préstamo puede requerir varios pasos para finalizarse, asumamos que son los siguientes pasos

1. Verificar el balance bancario del cliente

2. Comprobar la puntuación de crédito del cliente en tres compañías diferentes

3. Verificar información sobre otros prestamos del cliente

4. verificar el valor del stock de acciones del cliente.

5. Revisar las futuras ingresos potenciales del cliente en el futuro

Page 11: Patron Template

TEMPLATE METHOD

PATRONES

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

Page 12: Patron Template

TEMPLATE METHOD

PATRONES

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

Page 13: Patron Template

TEMPLATE METHOD

PATRONES

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

Page 14: Patron Template

PATRONES

TEMPLATE METHOD

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

Page 15: Patron Template

PATRONES

TEMPLATE METHOD

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(); }}

Page 16: Patron Template

PATRONES

TEMPLATE METHOD

El resultado de este ejemplo sería el siguiente:

Page 17: Patron Template

PATRONES

TEMPLATE METHOD

Ejemplo 2

El movimiento de un automóvil puede resumirse en tres pasos

• Acelerar

• Cambiar Marcha

• Frenar

Pero la forma en que se cambia la marcha puede variar de acuerdo al tipo de auto, pues puede ser automática o manual.

Page 18: Patron Template

PATRONES

TEMPLATE METHOD

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

Page 19: Patron Template

PATRONES

TEMPLATE METHOD

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..."); }}

Page 20: Patron Template

PATRONES

TEMPLATE METHOD

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..."); }}

Page 21: Patron Template

PATRONES

TEMPLATE METHOD

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();

}}

Page 22: Patron Template

PATRONES

TEMPLATE METHOD

El resultado de este ejemplo sería el siguiente:

Page 23: Patron Template

PATRONES

TEMPLATE METHOD

Page 24: Patron Template

PATRONES

TEMPLATE METHOD