Template Method (patrón de diseño)

Anuncio
20/10/2014
Template Method (patrón de diseño) - Wikipedia, la enciclopedia libre
Template Method (patrón de diseño)
De Wikipedia, la enciclopedia libre
Dentro del marco de la programación orientada a objetos, el patrón Template Method (Método Plantilla o
Método Modelo en español) es un patrón de diseño enmarcado dentro de los llamados patrones de
comportamiento, que se caracteriza por la definición, dentro de una operación de una superclase, de los pasos
de un algoritmo, de forma que todos o parte de estos pasos son redefinidos en las subclases herederas de la
citada superclase.
Índice
1 Propósito
2 Aplicabilidad
3 Estructura
4 Participantes
5 Colaboraciones
6 Consecuencias
7 Implementación
8 Ejemplo de implementación (Java)
9 Patrones relacionados
10 Véase también
10.1 Bibliografía
Propósito
Permitir que ciertos pasos de un algoritmo definido en una operación de una superclase, sean redefinidos en las
subclases sin necesidad de tener que sobrescribir la operación entera.
Aplicabilidad
La utilización del patrón Método Plantilla es adecuada en los siguientes casos:
Cuando contamos con un algoritmo con varios pasos que no cambian, de modo que dichos pasos
invariantes serían implementados en una superclase, dejando la implementación de los pasos que
cambian para las subclases.
Para evitar la replicación de código mediante generalización: se factoriza el comportamiento
común de varias subclases en una única superclase.
Para controlar las extensiones de las subclases. El Método Plantilla utiliza métodos especiales
(métodos de enganche o hooks) en ciertos puntos, siendo los únicos puntos que pueden ser
redefinidos y, por tanto, los únicos puntos donde es posible la extensión.
Estructura
Se muestra a continuación la estructura que sigue el patrón Método Plantilla:
http://es.wikipedia.org/w/index.php?title=Template_Method_(patr%C3%B3n_de_dise%C3%B1o)&printable=yes
1/4
20/10/2014
Template Method (patrón de diseño) - Wikipedia, la enciclopedia libre
Participantes
Clase Abstracta: proporciona la definición de una serie de operaciones primitivas (normalmente
abstractas) que implementan los pasos de un algoritmo y que serán definidas en las subclases.
Se encarga también de la implementación de un método desde el cual son invocadas, entre otras, las
operaciones primitivas. Dicho método actúa a modo de plantilla, de ahí el nombre de este patŕon,
definiendo la secuencia de operaciones de un algoritmo.
Clase Concreta: implementa las operaciones primitivas definidas en la clase abstracta de la cual hereda,
quedando así determinado el comportamiento específico del algoritmo definido en el método plantilla,
para cada subclase.
Colaboraciones
Las clases concretas se basan en la clase abstracta para implementar la parte invariante del algoritmo.
Consecuencias
La utilización de este patrón es fundamental a la hora de reutilizar código.
Se invierte el control: en este caso la superclase es la encargada de llamar a las operaciones definidas en
las subclases.
Distinción entre:
Operaciones primitivas (implementadas en la superclase)
Operaciones de enganche o hooks (proporcionan un código por defecto que puede ser refinado
en las subclases).
Cabe destacar que los métodos plantilla juegan un papel clave en las bibliotecas de clases ya que permiten
extraer el comportamiento común de las clases de la biblioteca. Otro uso común de este patrón se da en la
creación de sistemas de plugins gracias principalmente a la utilización de las anteriormente citadas operaciones
de enganche (hooks).
Implementación
http://es.wikipedia.org/w/index.php?title=Template_Method_(patr%C3%B3n_de_dise%C3%B1o)&printable=yes
2/4
20/10/2014
Template Method (patrón de diseño) - Wikipedia, la enciclopedia libre
A la hora de proceder a implementar este patrón, resulta de interés tener en cuenta los seguintes detalles:
Es recomendable declarar las operaciones primitivas de tal forma que sólo puedan ser llamadas por el
método plantilla (protected si se trabaja con el lenguaje de programación Java)
Debe reducirse en la medida de lo posible el número de operaciones primitivas que van a ser invocadas
desde el método plantilla. De este forma se reducirá la complejidad de las subclases y resultará menos
tediosa su implementación.
Ejemplo de implementación (Java)
Se muestra a continuación un ejemplo de implementación del patrón Método Plantilla. En él se intenta ilustrar a
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 varia de unos a otros según sean autos con cambio
manual o autos con cambio automático.
De acuerdo con esto, podemos considerar una superclase Automovil en la cual se define un método plantilla
Desplazar desde el cual se llama a la operación primitiva CambiarMarcha que es implementada de una forma
en la subclase "AutomovilManual", y de otra forma en la subclase "AutomovilAutomatico".
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");
}
}
http://es.wikipedia.org/w/index.php?title=Template_Method_(patr%C3%B3n_de_dise%C3%B1o)&printable=yes
3/4
20/10/2014
Template Method (patrón de diseño) - Wikipedia, la enciclopedia libre
public class AutomovilAutomatico extends AutoMovil
{
protected void cambiarMarcha()
{
System.out.println("Cambiando de marcha de forma automática");
}
}
Patrones relacionados
El patrón Método Plantilla acostumbra relacionarse con los siguientes patrones de diseño:
Estrategia
Los métodos plantilla usan la herencia para variar el comportamiento de un algoritmo. En el caso
del Patrón Estrategia se usa la delegación y se modifica el algoritmo entero.
Métodos de fabricación
Los métodos de fabricación suelen ser llamados desde los métodos plantilla.
Véase también
Bibliografía
E. Gamma, R. Helm, R. Johnson and J. Vlissides (1994). «Design Patterns: elements of reusable object­
oriented software». Addison­Wesley.
Obtenido de title=Template_Method_(patrón_de_diseño)&oldid=69138900»
«http://es.wikipedia.org/w/index.php?
Categoría: Patrones de diseño
Esta página fue modificada por última vez el 21 ago 2013 a las 03:14.
El texto está disponible bajo la Licencia Creative Commons Atribución Compartir Igual 3.0; podrían ser
aplicables cláusulas adicionales. Léanse los términos de uso para más información.
Wikipedia® es una marca registrada de la Fundación Wikimedia, Inc., una organización sin ánimo de
lucro.
http://es.wikipedia.org/w/index.php?title=Template_Method_(patr%C3%B3n_de_dise%C3%B1o)&printable=yes
4/4
Descargar