Difference between revisions of "Template Method Pattern (padrão de desenho)"

From Wiki**3

(Exemplo)
(Exemplo)
Line 11: Line 11:
 
==Exemplo==
 
==Exemplo==
  
Café, Chá, BebidaQuente.
+
Este exemplo aplica o padrão ao "problema" de preparação de uma bebida quente.
  
 
Este exemplo mostra a evolução de uma aplicação à medida que são aplicadas técnicas de programação com objectos, em que se refactoriza algum código, e de aplicação de padrões, neste caso, o ''template method''.
 
Este exemplo mostra a evolução de uma aplicação à medida que são aplicadas técnicas de programação com objectos, em que se refactoriza algum código, e de aplicação de padrões, neste caso, o ''template method''.
Line 19: Line 19:
 
Na situação inicial há repetição de código e não há abstracção de conceitos comuns nem, por isso, reutilização.
 
Na situação inicial há repetição de código e não há abstracção de conceitos comuns nem, por isso, reutilização.
  
 +
  public class Café {
 
    
 
    
 +
    void preparar() {
 +
      ferverÁgua();
 +
      juntarGrãosMoídos();
 +
      despejarNaChávena();
 +
      juntarAçúcar();
 +
    }
 +
 
 +
    // &c.
 +
  }
 +
 +
  public class Chá {
 +
 
 +
    void preparar() {
 +
      ferverÁgua();
 +
      juntarFolhas();
 +
      despejarNaChávena();
 +
      juntarLimão();
 +
    }
 +
 
 +
    // &c.
 +
  }
  
 
=== Segundo Cenário: Abstracção de Características Comuns ===
 
=== Segundo Cenário: Abstracção de Características Comuns ===

Revision as of 20:49, 21 November 2006

Material correspondente à aula 25.

O padrão "template method" corresponde à definição do esqueleto de um algoritmo de uma operação em que alguns passos são delegados em subclasses. O padrão permite que as subclasses redefinam partes do algoritmo sem a estrutura do algoritmo seja alterada.

Estrutura

O padrão template method tem a seguinte estrutura de classes:

Templatemethod-dpcd.png

Exemplo

Este exemplo aplica o padrão ao "problema" de preparação de uma bebida quente.

Este exemplo mostra a evolução de uma aplicação à medida que são aplicadas técnicas de programação com objectos, em que se refactoriza algum código, e de aplicação de padrões, neste caso, o template method.

Situação Inicial

Na situação inicial há repetição de código e não há abstracção de conceitos comuns nem, por isso, reutilização.

 public class Café {
 
   void preparar() {
     ferverÁgua();
     juntarGrãosMoídos();
     despejarNaChávena();
     juntarAçúcar();
   }
 
   // &c.
 }
 public class Chá {
 
   void preparar() {
     ferverÁgua();
     juntarFolhas();
     despejarNaChávena();
     juntarLimão();
   }
 
   // &c.
 }

Segundo Cenário: Abstracção de Características Comuns

Nesta situação abstrairam-se algumas das características comuns e procurou-se reutilizar o máximo de funcionalidade. Note-se que, ainda assim, há repetição da estrutura do "algoritmo" de aquecimento.


Terceiro Cenário: Aplicação do Padrão Template Method

Manteve-se a abstracção conseguida no segundo cenário e aplicou-se o padrão template method. O resultado é o desaparecimento do algoritmo repetido: agora aparece apenas na superclasse e as partes dependentes das subclasses são definidas por cada uma. Note-se que a interface é agora imposta pela superclasse e que pode haver necessidade de renomear alguns dos métodos existentes (ou, alternativamente, de os chamar a partir dos que implementam a interface devida à aplicação do padrão).