Template Method Pattern (padrão de desenho): Difference between revisions
From Wiki**3
| Line 11: | Line 11: | ||
==Exemplo== | ==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''. | 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 18: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:
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).