Template Method e Classe Abastrata - qual a diferença?

5 respostas
D

Olá Pessoal, primeiramente desculpe a pergunta que para vocês deve ser besta.

Estou estudando java na universidade e fazendo um trabalho sobre template method, e não consegui diferenciar o padrão de projeto template method de uma classe abstrata.

Alguém poderia ajudar diferenciando as duas?

Obrigado.

5 Respostas

A

template method é uma padrão de projetos.

classe abstrata pode ter métodos concretos e/ou abstratos (métodos sem implementação)

D

Alberes me desculpe mas sou iniciante então a tua resposta não me ajudou muito…

tnaires

Basicamente, uma classe abstrata pode usar um ou mais template methods, que são, de forma muito simplória, métodos abstratos utilizados para executar alguma tarefa na superclasse que são definidos apenas nas subclasses.

Veja um exemplo:
public abstract class Database {
    // Template method utilizado para efetuar operações antes de gravar os dados
    protected abstract void doBeforePost();

    // Template method utilizado para efetuar operações após gravar os dados
    protected abstract void doAfterPost();

    // Template method utilizado para efetuar operações caso ocorra erro na gravação dos dados
    protected abstract void onPostError(Exception ex);

    public void post(Record r) {
        try {
            doBeforePost();
            // Código para gravar dados no banco.
            doAfterPost();
        } catch (Exception ex) {
            onPostError(ex);
        }
    }
}
Aí poderíamos escrever um banco de dados transacional assim:
public class TransactionalDatabase extends Database {
    public void doBeforePost() {
        // Iniciar transação
    }

    public void doAfterPost() {
        // Commit
    }

    public void onPostError(Exception ex) {
        // Rollback
    }
}
O exemplo pode não ter sido muito adequado, mas foi a única coisa que eu consegui bolar agora :oops:
D

Obrigado Tnaires, já me ajudou bastante!

Na verdade então o Template Method nada mais é do que metodos abstratos que estão em uma classe abastrata que serao reescritos com diferentes funções em outras subclasses, correto?

Obrigado!

tnaires

Não é só isso. Isso aí é mais ou menos a definição de método abstrato. Para um método abstrato ser um template method, ele deve ser chamado de forma explícita na superclasse.

Veja por exemplo o método doBeforePost(). Ele está sendo chamado dentro do método post(); se não houvesse essa chamada, ele seria um método abstrato comum.

Criado 1 de junho de 2009
Ultima resposta 1 de jun. de 2009
Respostas 5
Participantes 3