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

Contido eliminado Contido engadido
m Bot: Substitución da categoría "Patróns de deseño" pola categoría "Padróns de deseño"; cambios estética
m Arranxos varios, replaced: patrón → padrón (19)
Liña 1:
Dentro do marco da [[programación orientada a obxectos]], o patrónpadrón '''Template Method''' (''Método Modelo'') é un [[patrónpadrón de deseño]] enmarcado dentro dos chamados [[patrónpadrón de deseño#patrónspadróns de comportamento|patrónspadró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 ==
Liña 5:
 
== Aplicabilidade ==
A utilización do patrónpadrón '''Método Modelo''' é 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.
Liña 11:
 
== Estrutura ==
Móstrase de seguido a estrutura que segue o patrónpadrón '''Método Modelo'''
[[Ficheiro:Estrutura MetodoPlantilla.png|centro|Estrutura do patrónpadrón ''Método Modelo'']]
 
== Participantes ==
Liña 24:
 
== Consecuencias ==
* A utilización deste patrónpadrón é fundamental á hora de reutilizar código.
* Invértese o control: neste caso a superclase é a encargada de chamar ás operacións definidas nas subclases.
* Distinción entre
Liña 30:
:* 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 modelo 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ónpadró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ónpadró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 modelo (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 modelo. 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ónpadrón Método Modelo. Nel inténtase ilustrar a grandes trazos 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 modelo ''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ónpadrón Método Modelo.]]
 
[[Ficheiro:Exemplo metodoPlantilla.png|centro|Exemplo do patrón Método Modelo.]]
 
 
<big><source lang ="java">
Liña 85 ⟶ 83:
</source></big>
 
== Patrónspadróns relacionados ==
 
O patrónpadrón '''Método Modelo''' adoita relacionarse cos patrónspadróns de deseño
== Patróns relacionados ==
* '''[[Strategy (patrónpadrón de deseño)|Estratexia]]'''
O patrón '''Método Modelo''' adoita relacionarse cos patróns de deseño
* os métodos modelo usan a herencia para variar o comportamento dun algoritmo. No caso do '''Patrónpadrón Estratexia''' úsase delegación e modificase o algoritmo enteiro.
* '''[[Strategy (patrón de deseño)|Estratexia]]'''
* '''[[Factory Method (patrónpadrón de deseño)|Métodos de fabricación]]'''
* os métodos modelo 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 modelo.