Dev (Back & Front)ARTIGO

Design Pattern não é receita de bolo – Parte 04: Template Method

Mais um artigo da série “Design Pattern não é receita de bolo”. E hoje vamos conhecer um padrão comportamental chamado de Template Method. Ele é bem simples – na verdade até já o usamos, mas nem nos damos conta. Porém, a ideia não é só implementar e saber o motivo da implementação; é entender de fato a ideia do padrão. No artigo de hoje vamos ver mais um exemplo prático: contas bancárias.

Template Method

É um padrão do tipo comportamental que define a ordem na qual determinados passos devem ser realizados na resolução do problema. Porém, esses passos podem ser realizados de forma diferentes.

Um exemplo no mundo real (meio bobo, porém válido) é que para caminhar é preciso dar um passo para frente primeiro. Essa é a ordem definida pelo sistema do corpo humano. Porém, a forma que daremos esse passo pode ser diferente de acordo com cada pessoa.

Outro exemplo: um banco tem vários tipos de conta: universitária, corrente, poupança, digital etc. Para cada tipo de conta o banco cobra uma taxa diferente, mas independente do tipo de conta, o cliente precisa depositar e sacar dinheiro.

O template method é baseado em métodos abstratos que serão implementados por classes concretas. No diagrama a seguir podemos ver:

Simples, não? Acredito que você já deve ter desenvolvido alguma classe nesse contexto.

Praticando

Vamos praticar e ver as coisas acontecendo à nível de código. A seguir, criaremos a nossa classe abstract que tem o template method, que nada mais é que um método abstract:

Conta.java:

package br.com.camilolopes.templatemethod;
/*
* classe que tem os template method baseados
* em métodos abstratos
*/
public abstract class Conta {
private double saldo;

public void deposita(double valor){
saldo = valor;
}
public void saque(double valor){
saldo -=valor;
saldo -=this.taxaConta();
}
//cada conta tem uma taxa diferente
public abstract double taxaConta();

public double getSaldo() {
return saldo;
}
}

Agora, criaremos a classe corrente e poupança:

Corrente.java:

package br.com.camilolopes.classes;

import br.com.camilolopes.templatemethod.Conta;

public class Corrente extends Conta {

@Override
public double taxaConta() {

return 0.1;
}
}

Poupanca.java:



package br.com.camilolopes.classes;
import br.com.camilolopes.templatemethod.Conta;
/*
* classe que implementa o método abstract que sao utilizados pelos templates methods
*/
public class Poupanca extends Conta {

@Override
public double taxaConta() {

return 0.5;
}
}

Para testarmos, vamos criar a classe com método main e verificar se para cada tipo de conta as taxas foram cobradas corretamente:

ContaMain.java:

package br.com.camilolopes.main;
import br.com.camilolopes.classes.Corrente;
import br.com.camilolopes.classes.Poupanca;
public class ContaMain {
public static void main(String[] args) {
Corrente corrente = new Corrente();
corrente.deposita(100.00);
corrente.saque(10.00);
System.out.println("Saldo em conta corrente " + corrente.getSaldo());
Poupanca poupanca = new Poupanca();
poupanca.deposita(100.00);
poupanca.saque(10.00);
System.out.println("Saldo em Poupança " + poupanca.getSaldo());
}
}

Agora é só rodar para ver o resultado.

Resultado

A seguir, temos o resultado no console:

É isso, pessoal! Nada mais que isso para o padrão template method. Muito simples, né? Porém, a ideia é  pegar o conceito principal do padrão e analisar com o problema que você tem e ver se ele se enquadra.

Vou ficando por aqui. Espero que tenham gostado do artigo de hoje.

é Bacharel em Sistemas de Informação e Especialista em Gestão e Estratégia de Negócios. Trabalha com TI desde 2003 e possui as certificações SCJP 5 e SCM. Trabalhou na IBM Brasil como Analista Programador Java, passou pelo laboratório da Enterprise Computing Lab (ECL) HP como Software Engineer, Ci&T como Engenheiro de Software em projeto JEE. Tem experiência internacional em Índia, Dubai e Londres. Atualmente é cofundador da ITSLabs (www.itslabs.com.br), uma start-up focada na criação de produtos web e mobile para start-ups. Também é autor dos livros "Guia do Exame SCJP", "Guia Prático JEE com Frameworks" e "TDD na prática".

Ver perfil