Template Method
Última actualización
¿Te fue útil?
Última actualización
¿Te fue útil?
Según el libro "Patrones de Diseño" el patrón Template Method "define en una operación el esqueleto de un algoritmo, delegando en las subclases algunos de sus pasos. Permite que las subclases redefinan ciertos pasos de un algoritmo sin cambiar su estructura".
ClaseAbstracta:
define operaciones primitivas abstractas que son definidas por los subtipos de datos para implementar los pasos de un algoritmo.
implementa una función plantilla que define el esqueleto de un algoritmo. La función plantilla llama a las operaciones primitivas así como a operaciones definidas en ClaseAbstracta o a las de otras variables.
ClaseConcreta:
implementa las operaciones primitivas para realizar los pasos del algoritmo específicos de los subtipos de datos.
No se observan impedimentos para su implementación en Go.
En este caso, dado que no existe la herencia de clase en Go, la ClaseAbstracta sugerida por el patrón debe implementarse en dos partes: a) por un lado los comportamientos abstractos deben definirse en una Interface, y b) por otro lado los comportamientos concretos (el método plantilla) dentro del propio tipo ClaseAbstracta.
Las ClasesConcretas se componen (en vez de heredar) de una ClaseConcreta.
Las ClasesConcretas implementan los comportamientos de la Interface.
La principal dificultad de implementar este patrón en Go es que el comportamiento del método plantilla de la ClaseAbstracta invoca a otros comportamientos que no están definidos dentro de la propia ClaseAbstracta sino dentro de la ClaseConcreta. Esto obliga a que cuando se invoca el método plantilla desde una ClaseConcreta se deba pasar una referencia de si misma para que el método plantilla pueda invocar los comportamientos definidos en la Interface.
Dada esta complejidad adicional léase esta forma de implementación junto al código de ejemplo del patrón.
En este ejemplo queremos cumplir con una serie de pasos formales (método plantilla) para desplegar diferentes aplicaciones móviles.
Implementación:
Se puede probar la implementación del patrón de la siguiente forma:
Implementación alternativa:
En esta alternativa no es necesario pasar la propia referencia del tipo concreto en el método Construir
. La construcción del tipo concreto se realiza componiéndolo con un tipo abstracto compuesto con el mismo tipo concreto.
Se puede probar la implementación alternativa del patrón de la siguiente forma:
|
Atención: Esta publicación se encuentra abandonada. Puede acceder a la versión vigente en