Olá! Seguindo a proposta de padrões de projeto com C#, falaremos hoje sobre o padrão comportamental Template Method. Para ver outros padrões que já visitamos por aqui consulte esse link. Esse tema foi tratado de forma brilhante aqui.
Template Method
Como dito anteriormente ele é um padrão comportamental que define etapas a serem seguidas, ou seja, com esse padrão podemos determinar etapas e a sequencia de execução delas, deixando a cargo de quem está implementantado como será a implementação dessas etapas.
E que vantagem Maria leva?
Bom, o grande diferencial aqui é poder ter um contrato que não só define o que deve ser feito mas também garante a sequencia a ser seguida, processos que seguem o mesmo roteiro porém de diferentes formas podem se beneficiar desse padrão:
- Frameworks fornecem métodos abstratos ou hooks para as subclasses personalizarem o comportamento;
- Algoritmos que têm uma estrutura comum mas detalhes diferentes, como ordenação, compilação ou mesmo criptografia;
- Classes que precisam definir um fluxo de execução com várias etapas opcionais ou variantes;
- Processamento de arquivos de diferentes tipos (por exemplo, CSV, XML, JSON), permitindo que as subclasses especifiquem as etapas específicas para analisar cada tipo;
Exemplificando
ConstrucaoTemplate
public abstract class ConstrucaoTemplate
{
public void Construir()
{
Iniciar();
FazerFundacao();
FazerParedes();
FazerTelhado();
Finalizar();
}
protected abstract void FazerFundacao();
protected abstract void FazerParedes();
protected abstract void FazerTelhado();
protected void Iniciar()
{
Console.WriteLine("Iniciando a construcao...");
}
protected void Finalizar()
{
Console.WriteLine("Finalizando a construcao...");
}
}
ConstrucaoAlvenaria
public class ConstrucaoAlvenaria : ConstrucaoTemplate
{
protected override void FazerFundacao()
{
Console.WriteLine("Fazendo fundacao da casa de alvenaria...");
}
protected override void FazerParedes()
{
Console.WriteLine("Fazendo paredes da casa de alvenaria...");
}
protected override void FazerTelhado()
{
Console.WriteLine("Fazendo telhado da casa de alvenaria...");
}
}
ConstrucaoMadeira
public class ConstrucaoMadeira : ConstrucaoTemplate
{
protected override void FazerFundacao()
{
Console.WriteLine("Fazendo fundacao da casa de madeira...");
}
protected override void FazerParedes()
{
Console.WriteLine("Fazendo paredes da casa de madeira...");
}
protected override void FazerTelhado()
{
Console.WriteLine("Fazendo telhado da casa de madeira...");
}
}
Executando
Console.WriteLine("Template Method!\r\n");
Console.WriteLine("\r\nCasa de alvenaria:");
ConstrucaoTemplate casaAlvenaria = new ConstrucaoAlvenaria();
casaAlvenaria.Construir();
Console.WriteLine("\r\nCasa de madeira:");
ConstrucaoTemplate casaMadeira = new ConstrucaoMadeira();
casaMadeira.Construir();
Resultado
Template Method!
Casa de alvenaria:
Iniciando a construcao...
Fazendo fundacao da casa de alvenaria...
Fazendo paredes da casa de alvenaria...
Fazendo telhado da casa de alvenaria...
Finalizando a construcao...
Casa de madeira:
Iniciando a construcao...
Fazendo fundacao da casa de madeira...
Fazendo paredes da casa de madeira...
Fazendo telhado da casa de madeira...
Finalizando a construcao...
Comentários
Postar um comentário
Obrigado por Participar do programero, fique a vontade para agradecer, retificar, perguntar ou sugerir.