![]() |
Patrones de Diseño: Template Method y Facade |
ELECTIVA PATRONES DE DISEÑO
Patrones de Diseño:
Template Method
Facade
FERNANDO R. JIMÉNEZ MENDOZA
Cod: 11227029
JUAN CARLOS MEJÍA VEGA
Cod: 11227026
Ingeniero
JOAN SEPULVEDA VELEZ
FUNDACIÓN UNIVERSITARIA TECNOLÓGICO COMFENALCO
PROGRAMA DE INGENIERÍA DE SISTEMAS
Semestre IX
Cartagena, 19 de noviembre de 2012
Patrón de diseño Témplate Method
El patrón de diseño Témplate Method (Método Plantilla o Método Modelo) forma parte de la familia de patrones denominados de comportamiento. Este tipo patrones ayudan a resolver problemas de interacción entre clases y objetos.
Este patrón nace de la necesidad de extender determinados comportamientos dentro de un mismo algoritmo por parte de diferentes entidades. Es decir, diferentes entidades tienen un comportamiento similar pero que difiere en determinados aspectos puntuales en función de la entidad concreta.
Una posible solución podría ser copiar el algoritmo en cada de las diferentes entidades cambiando la parte concreta en la que difieren. Esta solución tiene una consecuencia negativa ya que se genera código duplicado.
La solución que propone el patrón Témplate Method es abstraer todo el comportamiento que comparten las entidades en una clase (abstracta) de la que, posteriormente, extenderán dichas entidades. Esta superclase definirá un método que contendrá el esqueleto de ese algoritmo común (método plantilla o Témplate Method) y delegará determinada responsabilidad en las clases hijas, mediante uno o varios métodos abstractos que deberán implementar.
Aplicabilidad:
El patrón de diseño Témplate Method se utiliza adecuadamente en los siguientes casos:
Estructura:
Se muestra a continuación la estructura que sigue el patrón Témplate Method:
Implementación:
A la hora de proceder a implementar este patrón, resulta de interés tener en cuenta los siguientes detalles:
Ejemplo del patrón de diseño Témplate Method en java:
En este ejemplo se intenta ilustrar los grandes rasgos el modo de desplazamiento de un automóvil que, básicamente, se puede simplificar en: acelerar, cambiar de marcha y frenar. El proceso de acelerar y frenar se puede considerar que es idéntico en todos los automóviles, sin embargo la forma de cambiar de marcha varias de unos a autos según sean autos con cambio manual o autos con cambio automático.
public abstract class Automovil
{
public void desplazar()
{
acelerar();
cambiarMarcha();
frenar();
}
private void acelerar()
{
System.out.println("Acelerando...");
}
private void frenar()
{
System.out.println("Frenando...");
}
protected abstract void cambiarMarcha()
}
public class AutomovilManual extends AutoMovil
{
protected void cambiarMarcha()
{
System.out.println("Cambiando de marcha de forma manual");
}
}
public class AutomovilAutomatico extends AutoMovil
{
protected void cambiarMarcha()
{
System.out.println("Cambiando de marcha de forma automática");
}
}
FACADE
Su clasificación es estructural y fue creado con la intención de proveer una interfaz unificada para un conjunto de interfaces de un subsistema. Facade define una interfaz de alto nivel que hace, el subsistema fácil de usar.
Este fue creado para dividir un sistema en subsistemas, ayuda a reducir la complejidad del mismo, un diseño común disminuye las dependencias y comunicaciones entre subsistemas. Una forma de lograr esto es mediante el patrón facade, que provee una única y simple interfaz para el subsistema.
Sus principales aplicabilidades se encuentran:
Estructura
Ejemplo en Java:
El siguiente ejemplo esconde un calendario con un API complicada detrás de un patrón Facade más amigable. La salida es:
Fecha: 2011-05-15
15 días después: 2011-05-30
import java.util.Calendar;
import java.util.Formatter;
import java.util.GregorianCalendar;
/** Fachada */
public class FormatoFecha {
private GregorianCalendar gcal;
public FormatoFecha(String isodate_ymd) {
String[] a = isodate_ymd.split("-");
gcal = new GregorianCalendar(Integer.parseInt(a[0]), Integer.parseInt(a[1])-1, Integer.parseInt(a[2]));
}
public void sumarDias(int dias) {
gcal.add(Calendar.DAY_OF_MONTH, dias);
}
public String toString() {
return String.format("%1$tY-%1$tm-%1$td", gcal);
}
}
/** Cliente */
public class Cliente {
public static void main(String[] args) {
FormatoFecha d = new FormatoFecha("2011-05-15");
System.out.println("Fecha: "+d);
d.sumarDias(15);
System.out.println("15 días después: "+d);
}
}
Bibliografía
http://es.wikipedia.org/wiki/Template_Method_(patr%C3%B3n_de_dise%C3%B
http://www.adictosaltrabajo.com/tutoriales/tutoriales.php?pagina=PatronTemplateMethod
http://modelosprogramacion.blogspot.com/2009/05/nombre-facade.html
http://es.wikipedia.org/wiki/Facade_(patr%C3%B3n_de_dise%C3%B1o)