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.