Template Method
DefiniçãoDefinir um esqueleto de um algoritmo em uma operação, postergando alguns passos para subclasses. Template method permite que subclasses redefinam certos passos de um algoritmo sem mudar a estrutura do mesmo. As subclasses devem se responsabilizar por estas partes abstratas, deste algoritmo, que serão implementadas, possivelmente de várias formas, ou seja, cada subclasse irá implementar à sua necessidade e oferecer um comportamento concreto construindo todo o algoritmo.
Quando usar
· Para implementar as partes invariantes de um algoritmo uma só vez deixar para as subclasses a implementação do comportamento que pode variar.
· Para controlar extensões de subclasses. Você pode definir um método template que chama operações “gancho”( que podem ser redefinidas) em pontos específicos, desta forma permitindo extensões somente nesses pontos.
Desvantagens/Consequências
Os metodos template são uma técnica fundamental para a reutilização de código. Eles são particularmente importantes em bibliotecas de classe porque são os meios para a fatoração dos comportamentos comuns nas bibliotecas de classes.
Os métodos template conduzem a uma estrutura de inversão de controle, algumas vezes chamada de “ o princípio de hollywood ”, ou seja: “não nos chamem nós chamaremos você”. Isto se refere a como uma classe-mãe chama as operações de uma subclasse, e não o contrário. É importante para os métodos template especificarem quais operações são ganchos ( podem ser redefinidas) e quais operações são operações abstratas(devem ser redefinidas). Para reutilizar uma classe abstrata efetivamente, os codificadores de subclasses devem compreender quais as operações projetadas para redefinição. Uma subclasse pode estender o comportamento de uma operação de uma classe-mãe pela redefinição da operação e chamando a operação mãe explicitamente.
Estrutura
A representação do diagrama de classe no modelo da UML mostra como acontece físicamente a herança e quem fica responsável pela implementação. A importância de um diagrama de classes é porque descreve os tipos de objetos presentes no sistema e os vários tipos de relacionamentos estáticos existentes entre eles.Exemplo
Uma abordagem diferente é ter o código fonte, cujo diagrama de classe está representado acima, seja fiel ao que está sendo representado no diagrama UML.
package br.com.nc.architect.templatemethod;
public abstract class AbstractClass {
public final void templateMethod() {
System.out.println("AbstractClass.templateMethod() called");
primitiveOperation1();
primitiveOperation2();
}
public abstract void primitiveOperation1();
public abstract void primitiveOperation2();
}
package br.com.nc.architect.templatemethod;
public class Concrete1 extends AbstractClass {
public void primitiveOperation1() {
System.out.println("Concrete1.primitiveOperation1() called");
}
public void primitiveOperation2() {
System.out.println("Concrete1.primitiveOperation2() called");
}
}
package br.com.nc.architect.templatemethod;
public class Concrete2 extends AbstractClass {
public void primitiveOperation1() {
System.out.println("Concrete2.primitiveOperation1() called");
}
public void primitiveOperation2() {
System.out.println("Concrete2.primitiveOperation2() called");
}
}
package br.com.nc.architect.templatemethod;
public class TestTemplateMethod {
public static void main(String[] args) {
System.out.println("Test TemplateMethod");
System.out.println("-------------------------");
AbstractClass class1 = new Concrete1();
AbstractClass class2 = new Concrete2();
class1.templateMethod();
class2.templateMethod();
}
}
Exemplo de Uso
Os métodos template são tão fundamentais que eles podem ser encontrados em quase todas as classes abstratas.
Muito bom conteúdo.
ResponderExcluir