DEV Community

Juarez Júnior for Develop4Us

Posted on • Edited on

C# Design Pattern: Template Method (Portugues)

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();
    }
}
Enter fullscreen mode Exit fullscreen mode

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.

Código fonte: GitHub

Heroku

Build apps, not infrastructure.

Dealing with servers, hardware, and infrastructure can take up your valuable time. Discover the benefits of Heroku, the PaaS of choice for developers since 2007.

Visit Site

Top comments (0)

A Workflow Copilot. Tailored to You.

Pieces.app image

Our desktop app, with its intelligent copilot, streamlines coding by generating snippets, extracting code from screenshots, and accelerating problem-solving.

Read the docs

👋 Kindness is contagious

Please leave a ❤️ or a friendly comment on this post if you found it helpful!

Okay