top of page

C# Design Pattern: Template Method

O padrão Template Method define o esqueleto de um algoritmo em uma classe base, permitindo que subclasses implementem partes específicas do algoritmo. Ele é útil quando você tem um algoritmo que segue uma estrutura básica, mas algumas partes podem variar dependendo da implementação específica. Isso permite que o código compartilhado seja reutilizado enquanto ainda se fornece flexibilidade para as subclasses.


Exemplo de Código em C#:


// Classe abstrata que define o Template Method
public abstract class PrepararBebida
{
    // Método Template: define os passos do algoritmo
    public void Preparar()
    {
        FerverAgua();
        AdicionarIngredientePrincipal();
        Servir();
        if (AdicionarCondimentosDesejados())
        {
            AdicionarCondimentos();
        }
    }

    // Passos comuns
    private void FerverAgua()
    {
        Console.WriteLine("Fervendo água...");
    }

    private void Servir()
    {
        Console.WriteLine("Servindo a bebida...");
    }

    // Passos que serão implementados pelas subclasses
    protected abstract void AdicionarIngredientePrincipal();
    protected abstract void AdicionarCondimentos();

    // Hook method para condimentos opcionais
    protected virtual bool AdicionarCondimentosDesejados()
    {
        return true;
    }
}

// Subclasse para preparar café
public class PrepararCafe : PrepararBebida
{
    protected override void AdicionarIngredientePrincipal()
    {
        Console.WriteLine("Adicionando pó de café.");
    }

    protected override void AdicionarCondimentos()
    {
        Console.WriteLine("Adicionando açúcar e leite.");
    }
}

// Subclasse para preparar chá
public class PrepararCha : PrepararBebida
{
    protected override void AdicionarIngredientePrincipal()
    {
        Console.WriteLine("Adicionando o saquinho de chá.");
    }

    protected override void AdicionarCondimentos()
    {
        Console.WriteLine("Adicionando limão.");
    }

    protected override bool AdicionarCondimentosDesejados()
    {
        return false; // Não adicionar condimentos
    }
}

class Program
{
    static void Main(string[] args)
    {
        Console.WriteLine("Preparando Café:");
        PrepararBebida cafe = new PrepararCafe();
        cafe.Preparar();

        Console.WriteLine("\nPreparando Chá:");
        PrepararBebida cha = new PrepararCha();
        cha.Preparar();
    }
}

Explicação do Código:

Neste exemplo, a classe PrepararBebida define o método Preparar, que é o template para preparar uma bebida. Ele segue a mesma sequência de passos (ferver água, adicionar o ingrediente principal, servir, e opcionalmente adicionar condimentos). As subclasses PrepararCafe e PrepararCha implementam os detalhes específicos de como preparar café e chá, respectivamente. O método AdicionarCondimentosDesejados é um hook que permite às subclasses decidir se condimentos serão adicionados ou não.


Conclusão:

O padrão Template Method é útil quando você tem um algoritmo que segue uma estrutura básica, mas deseja permitir que subclasses modifiquem partes específicas desse algoritmo. Isso ajuda a reutilizar código comum e manter o código especializado separado.


0 visualização

Posts recentes

Ver tudo

Dica C#: Default Interface Methods

Vamos falar sobre uma novidade do C# 12: Default Interface Methods. Esse recurso permite que interfaces contenham implementações de...

Dica C#: Global Using Directives

Vamos para uma dica do C# 10: Global Using Directives. Com essa funcionalidade, você pode definir diretivas using globais que se aplicam...

bottom of page