Diferenzas entre revisións de «Template Method (padrón de deseño)»

arranxiños
m (Bot: Retiro 14 ligazóns interlingüísticas, proporcionadas agora polo Wikidata en d:q771778)
(arranxiños)
Dentro do marco da [[programación orientada a obxectos]], o patrón '''Template Method''' (''Método Plantilla'' ou ''Método Modelo'' en galego) é un [[patrón de deseño]] enmarcado dentro dos chamados [[patrón de deseño#patróns de comportamento|patróns de comportamento]], que se caracteriza pola definición, dentro dunha operación dunha superclase, dos pasos dun algoritmo, de forma que todos ou parte destes pasos son redefinidos nas subclases herdeiras da citada superclase.
 
== Propósito ==
 
== Aplicabilidade ==
A utilización do patrón '''Método PlantillaModelo''' é axeitada nos seguintes casos
* Cando contamos cun algoritmo con varios pasos que non cambian, de modo que ditos pasos invariantes serían implementados nunha superclase, deixando a implementación dos pasos que cambian para as subclases.
* Para evitar a replicación de código mediante '''xeneralización''' factorízase o comportamento común de varias subclases nunha única superclase.
* Para controlar as extensións das subclases. O '''Método PlantillaModelo''' utiliza métodos especiais (''métodos de enganche'' ou ''hooks'') en certos puntos, sendo os únicos puntos que poden ser redefinidos e, por tanto, os únicos puntos onde é posible a extensión.
 
== Estrutura ==
Móstrase de seguido a estrutura que segue o patrón '''Método PlantillaModelo'''
[[Ficheiro:Estrutura MetodoPlantilla.png|centro|Estrutura do patrón ''Método PlantillaModelo'']]
 
== Participantes ==
* '''Clase Abstracta''': proporciona a definición dunha serie de operacións primitivas (normalmente abstractas) que implementan os pasos dun algoritmo e que serán definidas nas subclases.
 
Encárgase tamén da implementación dun método desde o cal son invocadas, entre outras, as operacións primitivas. Dito método actúa a modo de plantillamodelo, de aí o nome deste patŕon, definindo a secuencia de operacións dun algoritmo.
* '''Clase Concreta''': implementa as operacións primitivas definidas na clase abstracta da cal herda, quedando así determinado o comportamento específico do algoritmo definido no método plantillamodelo, para cada subclase.
 
== Colaboracións ==
:* Operacións de ''enganche'' ou ''hooks'' (proporcionan un código por defecto que pode ser refinado nas subclases).
 
Cómpre destacar que os métodos plantillamodelo xogan un papel clave nas bibliotecas de clases xa que permiten extraer o comportamento común das clases da biblioteca. Outro uso común deste patrón dase na creación de sistemas de ''plugins'' grazas principalmente á utilización das anteriormente citadas ''operacións de enganche'' (''hooks'').
 
== Implementación ==
Á hora de proceder a implementar este patrón, resulta de interese ter en conta os seguintes detalles
* É recomendable declarar as operacións primitivas de tal xeito que só podan ser chamadas polo método plantillamodelo (protected se se traballa coa linguaxe de programación Java)
* Debe reducirse na medida do posible o número de operacións primitivas que van ser invocadas desde o método plantillamodelo. Deste xeito reducirase a complexidade das subclases e resultará menos tediosa a súa implementación.
 
== Exemplo de implementación ==
Amósase de seguido un exemplo de implementación do patrón Método PlantillaModelo. Nel inténtase ilustrar a grandes rasgostrazos o modo de desprazamento dun automóbil que, basicamente, pode simplificarse en: acelerar, cambiar de marcha e frear. O proceso de acelerar e frear pódese considerar que é idéntico en todos os automóbiles, sen embargo a forma de cambiar de marcha varia duns a outros segundo sexan autos con cambio manual ou autos con cambio automático.
Dacordo con esto, podemos considerar unha superclase ''Automobil'' na cal se define un método plantillamodelo ''Desprazar'' desde o cal se chama á operación primitiva ''CambiarMarcha'' que é implementada dun xeito na subclase "AutomobilManual", e doutro xeito na subclase "AutomobilAutomatico".
 
 
[[Ficheiro:Exemplo metodoPlantilla.png|centro|Exemplo do patrón Método PlantillaModelo.]]
 
 
 
== Patróns relacionados ==
O patrón '''Método PlantillaModelo''' adoita relacionarse cos patróns de deseño
* '''[[Strategy (patrón de deseño)|Estratexia]]'''
* os métodos plantillamodelo usan a herencia para variar o comportamento dun algoritmo. No caso do '''Patrón Estratexia''' úsase delegación e modificase o algoritmo enteiro.
* '''[[Factory Method (patrón de deseño)|Métodos de fabricación]]'''
* Os métodos de fabricación adoitan ser chamados desde os métodos plantillamodelo.
 
==Véxase tamén==
93.792

edicións