Template Method
Este artigo ou secção necessita de referências de fontes secundárias confiáveis e independentes. (dezembro de 2011) |
Um Template Method auxilia na definição de um algoritmo com partes do mesmo definidos por métodos abstratos. As subclasses devem se responsabilizar por estas partes abstratas, deste algoritmo, que serão implementadas, possivelmente de várias formas. Cada subclasse implementa de acordo com suas necessidades, oferecendo um comportamento concreto e construindo todo o algoritmo.
No contexto da programação orientada a objetos, o Template Method é um dos padrões de projeto comportamentais identificados pela Gangue dos Quatro (The Gang Of Four)[1] no livro Design Patterns. O Template Method é um método em uma superclasse, geralmente uma superclasse abstrata, que define a estrutura de uma operação em termos de vários passos de alto nível. Esses passos são implementados por métodos auxiliares adicionais na mesma classe do método template.
O Template Method fornece uma estrutura fixa de um algoritmo. Essa parte fixa deve estar presente na superclasse, sendo obrigatória uma classe abstrata que possa conter um método concreto, pois em uma interface só é possível conter métodos abstratos que definem um comportamento. Essa é a vantagem de ser uma classe abstrata, pois ela também fornece métodos abstratos às suas subclasses, que por sua vez herdam este método por herança e devem implementar os métodos abstratos, fornecendo um comportamento concreto aos métodos definidos como abstratos. Com isso, certas partes do algoritmo são preenchidas por implementações variadas, permitindo que subclasses redefinam ou personalizem a operação substituindo os métodos abstratos ou os métodos hook, que têm corpos vazios na superclasse. O intuito do Template Method é definir a estrutura geral da operação, permitindo que subclasses refinem ou redefinam certos passos.
Estrutura
A representação do diagrama de classe no modelo da UML mostra como acontece fisicamente 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.[2]

Código Java
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();
}
}
Referências
- ↑ [John]. «Gang of Four Design Patterns» [A Gangue dos Quatro] (em inglês) Verifique
|author-link1=valor (ajuda) - ↑ FOWLER, Martin. UML ESSENTIALS: um breve guia para a linguagem-padrão de modelagem de objetos. 3ª ed. pág 52. Porto Alegre.Bookman. 2005.
Content Disclaimer
Informasi ini disarikan dari Wikipedia dan disajikan kembali untuk tujuan edukasi. Konten tersedia di bawah lisensi CC BY-SA 3.0. Kami tidak bertanggung jawab atas ketidakakuratan data yang bersumber dari kontribusi publik tersebut.
- The information displayed on this website is sourced in part or in whole from Wikipedia and has been adapted for the purpose of restating it. We strive to provide accurate and relevant information, however:
- There is no guarantee of absolute accuracy. Wikipedia is an open, collaborative project that can be edited by anyone, so information is subject to change.
- It is not intended to constitute professional advice. The content displayed is for informational and educational purposes only. For important decisions (e.g., medical, legal, or financial), please consult a professional.
- Content copyright. Wikipedia is licensed under the Creative Commons Attribution-ShareAlike License (CC BY-SA). This means that content may be reused with appropriate attribution and shared under a similar license.
- Responsible use. Any risk arising from the use of information from this website is entirely the responsibility of the user.